国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS的內(nèi)建函數(shù)reduce

mrcode / 1345人閱讀

摘要:函數(shù),是規(guī)范中出現(xiàn)的數(shù)組方法。所有的一切通過一個函數(shù)來管理流程和傳遞初始參數(shù)。上面就是函數(shù)的實現(xiàn),它需要對象作為參數(shù),并返回一個類型的函數(shù),作為的第一個參數(shù)。在該函數(shù)內(nèi)部,則執(zhí)行多維的疊加工作。

@(js)

reduce函數(shù),是ECMAScript5規(guī)范中出現(xiàn)的數(shù)組方法。在平時的工作中,相信大家使用的場景并不多,一般而言,可以通過reduce方法實現(xiàn)的邏輯都可以通過forEach方法來變相的實現(xiàn),雖然不清楚瀏覽器的js引擎是如何在C++層面實現(xiàn)這兩個方法,但是可以肯定的是reduce方法肯定也存在數(shù)組的遍歷,在具體實現(xiàn)細節(jié)上是否針對數(shù)組項的操作和存儲做了什么優(yōu)化,則不得而知。

[TOC]

數(shù)組的reduce方法的應(yīng)用

reduce方法有兩個參數(shù),第一個參數(shù)是一個callback,用于針對數(shù)組項的操作;第二個參數(shù)則是傳入的初始值,這個初始值用于單個數(shù)組項的操作。需要注意的是,reduce方法返回值并不是數(shù)組,而是形如初始值的經(jīng)過疊加處理后的操作。

reduce方法最常見的場景就是疊加。

var items = [10, 120, 1000];

// our reducer function
var reducer = function add(sumSoFar, item) { return sumSoFar + item; };

// do the job
var total = items.reduce(reducer, 0);

console.log(total); // 1130

可以看出,reduce函數(shù)根據(jù)初始值0,不斷的進行疊加,完成最簡單的總和的實現(xiàn)。

前文中也提到,reduce函數(shù)的返回結(jié)果類型和傳入的初始值相同,上個實例中初始值為number類型,同理,初始值也可為object類型。

var items = [10, 120, 1000];

// our reducer function
var reducer = function add(sumSoFar, item) {
  sumSoFar.sum = sumSoFar.sum + item;
  return sumSoFar;
};

// do the job
var total = items.reduce(reducer, {sum: 0});

console.log(total); // {sum:1130}
多重疊加

使用reduce方法可以完成多維度的數(shù)據(jù)疊加。如上例中的初始值{sum: 0},這僅僅是一個維度的操作,如果涉及到了多個屬性的疊加,如{sum: 0,totalInEuros: 0,totalInYen: 0},則需要相應(yīng)的邏輯進行處理。

在下面的方法中,采用分而治之的方法,即將reduce函數(shù)第一個參數(shù)callback封裝為一個數(shù)組,由數(shù)組中的每一個函數(shù)多帶帶進行疊加并完成reduce操作。所有的一切通過一個manager函數(shù)來管理流程和傳遞初始參數(shù)。

var manageReducers = function(reducers) {
  return function(state, item) {
    return Object.keys(reducers).reduce(
      function(nextState, key) {
        reducers[key](state, item);
        return state;
      },
      {}
    );
  }
};

上面就是manager函數(shù)的實現(xiàn),它需要reducers對象作為參數(shù),并返回一個callback類型的函數(shù),作為reduce的第一個參數(shù)。在該函數(shù)內(nèi)部,則執(zhí)行多維的疊加工作(Object.keys())。

通過這種分治的思想,可以完成目標對象多個屬性的同時疊加,完整代碼如下:

var reducers = {  
  totalInEuros : function(state, item) {
    return state.euros += item.price * 0.897424392;
  },
  totalInYen : function(state, item) {
    return state.yens += item.price * 113.852;
  }
};

var manageReducers = function(reducers) {
  return function(state, item) {
    return Object.keys(reducers).reduce(
      function(nextState, key) {
        reducers[key](state, item);
        return state;
      },
      {}
    );
  }
};

var bigTotalPriceReducer = manageReducers(reducers);

var initialState = {euros:0, yens: 0};

var items = [{price: 10}, {price: 120}, {price: 1000}];

var totals = items.reduce(bigTotalPriceReducer, initialState);

console.log(totals);

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/78787.html

相關(guān)文章

  • [這段代碼很Pythonic]Python中內(nèi)建函數(shù)(Built_in Funtions)

    摘要:前言在官方文檔的標準庫章節(jié)中,第一節(jié)是簡介,第二節(jié)就是,可見內(nèi)建函數(shù)是標準庫的重要組成部分,而有很多內(nèi)建函數(shù)我們平時卻很少用到或根本就不知道原來還有這么好用的函數(shù)居然直接就可以拿來用。接下來為大家介紹一些我認為被大家忽略掉的內(nèi)建函數(shù)。 前言 在Python官方文檔的標準庫章節(jié)中,第一節(jié)是簡介,第二節(jié)就是Built_in Functions,可見內(nèi)建函數(shù)是Python標準庫的重要組成部分...

    zgbgx 評論0 收藏0
  • Redux概念之四: reducer(歸納函數(shù))與純函數(shù)

    摘要:函數(shù)的區(qū)分是以純函數(shù)與不純函數(shù)兩者來區(qū)分,但這不光只有無副作用的差異,還有其他的條件。現(xiàn)在已經(jīng)有一些新式的函數(shù)庫或框架例如,會特別強制要求在某些地方只能使用純函數(shù),而具有副作用的不純函數(shù)只能在特定的情況下才能使用。 reducer(歸納函數(shù)) reducer(歸納函數(shù))這種函數(shù)的名稱,是由數(shù)組的一個迭代方法reduce(歸納)而來,你可以參考MDN中的相關(guān)說明: 在JS語言中的數(shù)組re...

    wangjuntytl 評論0 收藏0
  • JS進階篇--JS數(shù)組reduce()方法詳解及高級技巧

    摘要:基本概念方法接收一個函數(shù)作為累加器,數(shù)組中的每個值從左到右開始縮減,最終為一個值。例進階應(yīng)用使用方法可以完成多維度的數(shù)據(jù)疊加。在該函數(shù)內(nèi)部,則執(zhí)行多維的疊加工作。參考的內(nèi)建函數(shù)數(shù)組方法的高級技巧 基本概念 reduce() 方法接收一個函數(shù)作為累加器(accumulator),數(shù)組中的每個值(從左到右)開始縮減,最終為一個值。 reduce 為數(shù)組中的每一個元素依次執(zhí)行回調(diào)函數(shù),不包括...

    jerryloveemily 評論0 收藏0
  • 看例子,學(xué) Python(三)

    摘要:看例子,學(xué)三看例子,學(xué)一看例子,學(xué)二包創(chuàng)建一個目錄,把挪到里面,再添加一個空文件便是一個包。對來說,對象由引用計數(shù)管理,計數(shù)為時對象會自動銷毀。給定請問看例子,學(xué)一看例子,學(xué)二 看例子,學(xué) Python(三) 看例子,學(xué) Python(一)看例子,學(xué) Python(二) 包 創(chuàng)建一個目錄 myutil,把 mymath.py 挪到里面,再添加一個空文件 __init__.py: myu...

    darkerXi 評論0 收藏0
  • 小李飛刀:python請你輕輕輕點虐

    摘要:迭代器可以直接作用于循環(huán)的對象統(tǒng)稱為可迭代對象。可以被函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器。這個高階函數(shù),關(guān)鍵在于正確實現(xiàn)一個篩選函數(shù)。 又是日常嘮嗑的一小段 真的是非常話嘮的在下,日常給自己打點雞血吧。昨晚和老媽聊了一整晚,所以昨天并沒有更新。然后因為很快要開始算個稅減免的部分,對于溫飽線的在下而言,其實減免的可能就只是奶茶錢吧。工作的本質(zhì)是賺錢,我也很想在30歲之前完成財務(wù)自...

    Keagan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<