国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

解析JavaScript數(shù)組方法reduce

2019-11-19 18:32:53
字體:
供稿:網(wǎng)友

Array.prototype.reduce()

概述

reduce()方法是數(shù)組的一個(gè)實(shí)例方法(共有方法),可以被數(shù)組的實(shí)例對象調(diào)用。reduce() 方法接收一個(gè)函數(shù)作為累加器(accumulator),數(shù)組中的每個(gè)值(從左到右)開始縮減,最終為一個(gè)值。

語法

arr.reduce(callback[, initialValue]) {}

參數(shù)

回調(diào)函數(shù)中可以傳遞四個(gè)參數(shù)。

previousValue:上一次調(diào)用回調(diào)函數(shù)返回的值,或者是提供的初始值(initialValue)

currentValue:數(shù)組中當(dāng)前被處理的元素

currentIndex:當(dāng)前被處理元素在數(shù)組中的索引, 即currentValue的索引.如果有initialValue初始值, 從0開始.如果沒有從1開始

array:調(diào)用 reduce 的數(shù)組

initialValue:可選參數(shù), 作為第一次調(diào)用 callback 的第一個(gè)參數(shù)

返回值

reduce()返回值是最后一次調(diào)用回調(diào)函數(shù)返回的結(jié)果

描述

reduce 為數(shù)組中的每一個(gè)元素依次執(zhí)行回調(diào)函數(shù),不包括數(shù)組中被刪除或從未被賦值的元素,接受四個(gè)參數(shù):

  1. previousValu 上一次值
  2. currentValue 當(dāng)前值
  3. currentIndex 當(dāng)前值的索引
  4. array 數(shù)組

回調(diào)函數(shù)第一次執(zhí)行時(shí),previousValue 和 currentValue可能是兩個(gè)不同值其中的一個(gè),如果reduce有initialValue參數(shù),那么 previousValue 等于 initialValue ,并且currentValue 等于數(shù)組中的第一個(gè)值;如果reduce沒有 initialValue 參數(shù),那么previousValue 等于數(shù)組中的第一個(gè)值,currentValue等于數(shù)組中的第二個(gè)值。

注意: 如果沒有initialValue參數(shù), reduce從index為1開始執(zhí)行回調(diào)函數(shù), 跳過第一個(gè)index。 如果有initialValue參數(shù), reduce 將從index為 0 開始執(zhí)行回調(diào)

如果數(shù)組是空的并且沒有initialValue參數(shù), 將會拋出TypeError錯(cuò)誤. 如果數(shù)組只有一個(gè)元素并且沒有初始值initialValue, 或者有initialValue但數(shù)組是空的, 這個(gè)唯一的值直接被返回而不會調(diào)用回調(diào)函數(shù)。

通常來說提供一個(gè)initialValue初始值更安全一點(diǎn), 因?yàn)闆]有的話會出現(xiàn)如下輸出結(jié)果。

//沒有提供initialValuefunction foo(){ return [1,2,3,4,5].reduce((x, y) => x + y); //15};console.log(foo.call(this));function foo(){ return [].reduce((x, y) => x + y); //TypeError};console.log(foo.call(this));//提供initialValuefunction foo(){ return [].reduce((x, y) => x + y, 0); //0};console.log(foo.call(this));

reduce()是如何工作的

[0, 1, 2, 3, 4].reduce((previousValue, currentValue, index, array) => previousValue + currentValue);

回調(diào)被執(zhí)行四次,每次的參數(shù)和返回值如下表:

reduce 的返回值是回調(diào)函數(shù)最后一次被調(diào)用的返回值(10)。

如果把初始值作為第二個(gè)參數(shù)傳入 reduce,結(jié)果如下,結(jié)果如下:

[0, 1, 2, 3, 4].reduce((previousValue, currentValue, index, array) => previousValue + currentValue, 10);

最后一次函數(shù)調(diào)用的返回值 (20) 作為reduce函數(shù)的結(jié)果被返回

注意:添加了initialValue參數(shù)會多調(diào)用一次回調(diào)函數(shù)

例題

將數(shù)組所有項(xiàng)相加

let sum = [0, 1, 2, 3, 4].reduce((x, y) => x + y, 0); // 10

扁平化一個(gè)二維數(shù)組

let arr = [[1, 2], [3, 4], [5, 6]].reduce((x, y) => x.concat(y), []);// [1, 2, 3, 4, 5, 6]

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持武林網(wǎng)!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 呈贡县| 新干县| 根河市| 五常市| 眉山市| 梓潼县| 双鸭山市| 汉源县| 阿瓦提县| 咸阳市| 弥勒县| 鸡东县| 北安市| 鸡泽县| 卓资县| 光山县| 黔西县| 五峰| 博罗县| 扎兰屯市| 彝良县| 江永县| 广南县| 安岳县| 荥经县| 桐梓县| 东城区| 紫金县| 新化县| 乌兰察布市| 屯门区| 游戏| 金堂县| 阳谷县| 岱山县| 宝鸡市| 敖汉旗| 永宁县| 南开区| 边坝县| 蒲江县|