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

資訊專(zhuān)欄INFORMATION COLUMN

數(shù)組的reduce方法

趙春朋 / 2429人閱讀

摘要:數(shù)組的方法大家對(duì)數(shù)組的,等的操作應(yīng)該都比較熟悉了。首先,的用法如下對(duì)數(shù)組中的所有元素調(diào)用指定的回調(diào)函數(shù)。語(yǔ)法注意這時(shí)候只能是同步方法參數(shù)含義通過(guò)上一次調(diào)用回調(diào)函數(shù)獲得的值。否者將是調(diào)用數(shù)組的第一項(xiàng)當(dāng)前數(shù)組元素的值。

數(shù)組的reduce方法

async await reduce array

大家對(duì)數(shù)組的map,filterforEach等的操作應(yīng)該都比較熟悉了。這兩天寫(xiě)代碼的時(shí)候用到了reduce方法,一不小心寫(xiě)出了一個(gè)bug,在此記錄一下。

首先,reduce的用法如下:

對(duì)數(shù)組中的所有元素調(diào)用指定的回調(diào)函數(shù)。該回調(diào)函數(shù)的返回值為累積結(jié)果,并且此返回值在下一次調(diào)用該回調(diào)函數(shù)時(shí)作為參數(shù)提供。

語(yǔ)法:

array.reduce(callback[,initialValue]) //注意這時(shí)候只能是同步方法
function callbackfn(previousValue, currentValue, currentIndex, array1)
參數(shù) 含義
previousValue 通過(guò)上一次調(diào)用回調(diào)函數(shù)獲得的值。如果向 reduce 方法提供initialValue,則在首次調(diào)用函數(shù)時(shí),previousValue 為 initialValue。否者將是調(diào)用數(shù)組的第一項(xiàng)
currentValue 當(dāng)前數(shù)組元素的值。
currentIndex 當(dāng)前數(shù)組元素的數(shù)字索引。
array1 包含該元素的數(shù)組對(duì)象。

實(shí)現(xiàn):

// 實(shí)現(xiàn)數(shù)組的每一項(xiàng)之和
var arr = [1,2,3,4]
arr.reduce((pre,cur) => {return pre + cur}) // return 10
實(shí)現(xiàn)數(shù)組的每一項(xiàng)轉(zhuǎn)化為對(duì)象,例({1: 1, 2: 2, 3: 3, 4: 4})
var arr = [1,2,3,4]
arr.reduce((final,cur) => {
  final[cur] = cur
  return final
}, {}) // return {1: 1, 2: 2, 3: 3, 4: 4}

BUG
昨天的代碼,我是這么實(shí)現(xiàn)的:

async function getGroup() {
    ...
}

async function getGroups() {
  var arr = [1,2,3]
  const result = arr.reduce(async (final,cur) => {
    final[cur] = await getGroup(cur)
    console.log(final, "<===final")
    return final
  }, {}) 
}
// final的打印值
{ "9ddc9834-9344-4cc1-be38-ba2d0e9d17c5": { recommendType: 1, weight: 123 } } "<===final"
Promise {
  _c: [],
  _a: undefined,
  _s: 1,
  _d: true,
  _v: { "9ddc9834-9344-4cc1-be38-ba2d0e9d17c5": { recommendType: 1, weight: 123 } },
  _h: 0,
  _n: false,
  "9bb6ed56-29a3-47e5-89a8-b652e8f08ef8": { recommendType: 2, weight: 12 } } "<===final"
Promise {
  _c: [],
  _a: undefined,
  _s: 0,
  _d: false,
  _v: undefined,
  _h: 0,
  _n: false,
  "30ffffd8c9-2132-4d27-bc4b-4d27305acec9": {} }"<===final"

我們可以看到final的值并不是我們預(yù)期的,循環(huán)中只有第一個(gè)值是對(duì)的,后面的值都不對(duì),而且看起來(lái)是個(gè)Promise對(duì)象。這是為什么呢?
接下來(lái)看到上面的實(shí)現(xiàn)翻譯成reduce的底層實(shí)現(xiàn)方式:

var final = {}
async function getGroup(final, cur){
  final[cur] = await getGroup(cur)
  console.log(final, "<===final")
  return final
}
for(var i = 0, i < arr.lenght, i++) {
   final = getGroup(final, arr[i])
   //這里沒(méi)有用async await執(zhí)行異步方法,導(dǎo)致,傳回的final只是個(gè)Promise方法對(duì)象
}

這樣我們就清楚為什么上面會(huì)打印這么奇怪的結(jié)果了。下面我們只要做小小的修改,就可以得到正確的結(jié)果:

var temp = {}
async function getGroup() {
    ...
}

async function getGroups() {
  var arr = [1,2,3]
  const result = arr.reduce(async (final,cur) => {
    temp[cur] = await getGroup(cur)
    console.log(temp, "<===final")
    return temp
  }, {}) 
}

以后還是盡量避免在reduce里面執(zhí)行異步方法~

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

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

相關(guān)文章

  • JS進(jìn)階篇--JS數(shù)組reduce()方法詳解及高級(jí)技巧

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

    jerryloveemily 評(píng)論0 收藏0
  • JS內(nèi)建函數(shù)reduce

    摘要:函數(shù),是規(guī)范中出現(xiàn)的數(shù)組方法。所有的一切通過(guò)一個(gè)函數(shù)來(lái)管理流程和傳遞初始參數(shù)。上面就是函數(shù)的實(shí)現(xiàn),它需要對(duì)象作為參數(shù),并返回一個(gè)類(lèi)型的函數(shù),作為的第一個(gè)參數(shù)。在該函數(shù)內(nèi)部,則執(zhí)行多維的疊加工作。 @(js) reduce函數(shù),是ECMAScript5規(guī)范中出現(xiàn)的數(shù)組方法。在平時(shí)的工作中,相信大家使用的場(chǎng)景并不多,一般而言,可以通過(guò)reduce方法實(shí)現(xiàn)的邏輯都可以通過(guò)forEach方法來(lái)...

    mrcode 評(píng)論0 收藏0
  • Javascript 中map/reduce

    摘要:簡(jiǎn)單例子一個(gè)較為常用的場(chǎng)景就是累加或累乘輸出數(shù)組元素的乘積輸出數(shù)組元素的乘積簡(jiǎn)寫(xiě)形式輸出數(shù)組元素的乘積形式,營(yíng)造復(fù)雜的逼格用在數(shù)組降維扁平化處理的例子中注方法用于連接兩個(gè)或多個(gè)數(shù)組。 看到一個(gè)提問(wèn)的回答巧妙地使用了map/reduce操作,很優(yōu)雅,所以來(lái)學(xué)習(xí)和總結(jié)一下javascript自帶的map/reduce的使用技巧,文章不會(huì)講的很深,純當(dāng)科普一下知識(shí)點(diǎn),如有解釋的不正確的地方,...

    zhou_you 評(píng)論0 收藏0
  • 面試題目別有洞天 -> 從es6優(yōu)雅解法,到降級(jí)polyfill,再到redux reduce

    摘要:每次被執(zhí)行時(shí),和被傳入,這個(gè)根據(jù)進(jìn)行累加或者是自身消減,英文原意,進(jìn)而返回最新的。 之前的一篇文章:從一道面試題,到我可能看了假源碼討論了bind方法的各種進(jìn)階Pollyfill,今天再分享一個(gè)有意思的題目。 從解這道題目出發(fā),我會(huì)談到數(shù)組的Reduce方法,ES6特性和Redux數(shù)據(jù)流框架中Reducer的命名等等。一道典型的題目,卻如唐代詩(shī)人章碣《對(duì)月》詩(shī)中所云:別有洞天三十六,水...

    econi 評(píng)論0 收藏0
  • Javascript中數(shù)組方法reduce妙用之處

    摘要:數(shù)組方法中,相比等常用的迭代方法,常常被我們所忽略,今天一起來(lái)探究一下在我們實(shí)戰(zhàn)開(kāi)發(fā)當(dāng)中,能有哪些妙用之處,下面從語(yǔ)法開(kāi)始介紹。按順序運(yùn)行異步函數(shù)我們可以做的另一件事是按順序運(yùn)行而不是并行。函數(shù)返回一個(gè)對(duì)象,可以使用方法添加回調(diào)函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000019423051); Javascript數(shù)組方...

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

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

0條評(píng)論

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