什麼是reduce方法?
先來看一下用用法:
var arr = [1, 2, 3, 4]由上面**可以看出,reduce對陣列arr的每乙個成員執行了sum函式。sum的引數a是累積變數,引數b是當前的陣列成員。每次執行時,b會回到a,最後輸出a。var sum = (a, b) => a +b
arr.reduce(sum, 0) //
10
累積變數必須有乙個初始值,上例是reduce函式的第二個引數0,如果省略該引數,那麼初始值預設是陣列的第乙個成員。
var arr = [1, 2, 3, 4]reduce省略了初始值,通過sum函式裡面的列印語句,可以看到累積變數每一次的變化。reduce方法提供了一種遍歷手段,對陣列所有成員進行『累積』處理。var sum = function
(a, b)
arr.reduce(sum)
//=> 10
//1 2
//3 3
//6 4
既然是遍歷,那它跟 for 、 while有什麼不同呢?
for :
var arr = [1, 2, 3, 4]whilearray.prototype.sum = function
()
return
sumresult;
}arr.sum();
//10
var arr = [1, 2, 3, 4]以上**都能實現reduce的功能,那為何還要搞這玩意呢?array.prototype.sum = function
()
return
sumresult;
}arr.sum()
//10
一般來說類似的方法比較都會是效能方面的比較,來看看各自的耗時
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 ...