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

資訊專欄INFORMATION COLUMN

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

mrcode / 1352人閱讀

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

@(js)

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

[TOC]

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

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

reduce方法最常見的場(chǎng)景就是疊加。

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,不斷的進(jìn)行疊加,完成最簡(jiǎn)單的總和的實(shí)現(xiàn)。

前文中也提到,reduce函數(shù)的返回結(jié)果類型和傳入的初始值相同,上個(gè)實(shí)例中初始值為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},這僅僅是一個(gè)維度的操作,如果涉及到了多個(gè)屬性的疊加,如{sum: 0,totalInEuros: 0,totalInYen: 0},則需要相應(yīng)的邏輯進(jìn)行處理。

在下面的方法中,采用分而治之的方法,即將reduce函數(shù)第一個(gè)參數(shù)callback封裝為一個(gè)數(shù)組,由數(shù)組中的每一個(gè)函數(shù)多帶帶進(jìn)行疊加并完成reduce操作。所有的一切通過一個(gè)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ù)的實(shí)現(xiàn),它需要reducers對(duì)象作為參數(shù),并返回一個(gè)callback類型的函數(shù),作為reduce的第一個(gè)參數(shù)。在該函數(shù)內(nèi)部,則執(zhí)行多維的疊加工作(Object.keys())。

通過這種分治的思想,可以完成目標(biāo)對(duì)象多個(gè)屬性的同時(shí)疊加,完整代碼如下:

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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

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

相關(guān)文章

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

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

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

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

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

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

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

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

    darkerXi 評(píng)論0 收藏0
  • 小李飛刀:python請(qǐng)你輕輕輕點(diǎn)虐

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

    Keagan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<