reduce方法和reduceRight方法

2022-05-01 16:51:12 字數 2601 閱讀 5018

什麼是reduce方法?

先來看一下用用法:

var arr = [1, 2, 3, 4]

var sum = (a, b) => a +b

arr.reduce(sum, 0) //

10

由上面**可以看出,reduce對陣列arr的每乙個成員執行了sum函式。sum的引數a是累積變數,引數b是當前的陣列成員。每次執行時,b會回到a,最後輸出a。

累積變數必須有乙個初始值,上例是reduce函式的第二個引數0,如果省略該引數,那麼初始值預設是陣列的第乙個成員。

var arr = [1, 2, 3, 4]

var sum = function

(a, b)

arr.reduce(sum)

//=> 10

//1 2

//3 3

//6 4

reduce省略了初始值,通過sum函式裡面的列印語句,可以看到累積變數每一次的變化。reduce方法提供了一種遍歷手段,對陣列所有成員進行『累積』處理。

既然是遍歷,那它跟 for 、 while有什麼不同呢?

for :

var arr = [1, 2, 3, 4]

array.prototype.sum = function

()

return

sumresult;

}arr.sum();

//10

while 

var arr = [1, 2, 3, 4]

array.prototype.sum = function

()

return

sumresult;

}arr.sum()

//10

以上**都能實現reduce的功能,那為何還要搞這玩意呢? 

一般來說類似的方法比較都會是效能方面的比較,來看看各自的耗時

var arr = [1, 2, 3, 4]

console.time('forloop');

array.prototype.forloop = function

()

return

sumresult;

}arr.forloop();

console.log('最終的值:' + arr.forloop()) //

10console.timeend('forloop')

var arr = [1, 2, 3, 4]
console.time('whileloop')

array.prototype.whileloop = function

() }

return

sumresult;

}arr.whileloop()

console.log('最終的值:' +arr.whileloop())

console.timeend('whileloop')

經多次執行測試發現 10000次執行使用for迴圈 和while的時間大致相當,大概需要 4 - 7ms 不等!

那reduce呢? 

var arr = [1, 2, 3, 4]

console.time('reduce')

array.prototype.reducesum = function

() );

}}arr.reducesum();

console.log('最終的值:' + arr.reducesum()) //

10console.timeend('reduce')

可見,時間大概在1-3ms之間,耗時情況一目了然!

reduceright()方法

reduceright() 方法的功能和reduce()功能是一樣的,不同的是reduceright() 從陣列的末尾向前將陣列中的陣列項做累加。

reduceright() 首次呼叫**函式callbackfn 時,prevalue 和 curvalue 可以是兩個值之一。如果呼叫reduceright()時提供了第二個引數,則prevalue等於該引數,curvalue等於陣列中的最後乙個值。如果沒有提供,則prevalue等於陣列最後乙個值,curvalue等於陣列中倒數第二個值。

var arr = [0, 1, 2, 3, 4];

arr.reduceright(

function

(prevalue, curvalue, index, array) );

//10

//4 3

//7 2

//9 1

//10 0

arr.reduceright(

function

(prevalue, curvalue, index, array) , 5) //

15//

5 4//

9 3//

12 2

//14 1

//15 0

陣列reduce 方法

reduce 函式接收的引數和map 類似,乙個函式f,乙個list,但行為和map 不同,reduce 傳入的函式f必須接收兩個引數,reduce 對list的每個元素反覆呼叫函式f,並返回最終結果值。例子def f x,y return x y reduce f,1,3,5,7,9 返回結果為2...

陣列 reduce 方法

reduce 是接受乙個函式作為累加器,陣列中每乙個值從左到右計算成乙個值 arr.reduce callback,initialvaluce 1.previousvalue 上一次呼叫返回的值或者是提供的初始值 initialvalue 2.currentvalue 陣列當前被處理的元素 3.in...

陣列的reduce方法

arr.reduce callback accumulator,currentvalue,index,array initialvalue 如果沒有initialvalue,預設陣列的第一項為initialvalue,第一次的currentvalue為陣列的第二項 沒有提供initialvalue ...