reduce妙用

##語法數組

/*
* @param accumulator 函數傳進來的初始值或上一次回調的返回值
* @param currentValue 數組中當前處理的元素值
* @param currentIndex 當前元素索引
* @param arr  當前元素所屬的數組自己
* @param initialValue 初始值,能夠是數組或者對象,有妙用
*/
    array.reduce(function(accumulator, currentValue, currentIndex, arr), initialValue)
  • 注意初始值的傳遞與不傳遞的區別:回調函數第一次執行時,accumulator 和currentValue的取值有兩種狀況:若是調用reduce()時提供了initialValue,accumulator取值爲initialValue,currentValue取數組中的第一個值;若是沒有提供 initialValue,那麼accumulator取數組中的第一個值,currentValue取數組中的第二個值

例子:

  • 累加
let ary = [1,2,3,4];
let sum =  ary.reduce((a,b) => {
    return a + b;
}) // 10
  • 初始值傳對象,統計數組中相同項的個數
let car  = ['BMW', 'Benz', 'Tesla', 'BMW', 'Toyota'];
let obj = car.reduce((a, b) => {
    a[b] = a[b] ? a[b] + 1 : 1;
    return a
},{}) 
// obj結果爲 {
    BMW: 2,
    Benz: 1,
    Tesla: 1,
    Toyota: 1
}
  • 同時代替map和filter,傳入數組,好比要過濾數組中的值乘以2後大於100的項
let ary = [20,30,60,55,10];
let result = ary.reduce((a,b) => {
    if(b * 2 > 100) {
        a.push(b * 2)
    }
    return a;
}, []);
// 結果爲[120,110]
  • tip foreach沒有返回值,爲undefined
相關文章
相關標籤/搜索