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ù):
回調(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)!
新聞熱點(diǎn)
疑難解答