关于javascript:js方法reduce的使用

5次阅读

共计 1145 个字符,预计需要花费 3 分钟才能阅读完成。

arr.reduce(callBack(sumVal,curVal,index,arr),initValue);
·如果有 initValue, 则依据数值类型进行计算,
如果未填写 initValue,则初始值为数组的第 1 项,从数组的第 2 项进行计算,循环次数减 1。
·callBack 有四个参数 (preVal,curVal,index,arr) 即(上次返回的值,以后元素,索引,原数组)

let sum = arr.reduce((sumVal,curVal,index,arr)=>{console.log(sumVal,curVal,index,arr);
  return sumVal+curVal;
})
// 输入
1 2 1 [1,2,3,4]
3 3 2 [1,2,3,4]
6 4 3 [1,2,3,4]

·如果填写 initValue,则会从数组的第一个元素开始循环

let sum = arr.reduce((sumVal,curVal,index,arr)=>{console.log(sumVal,curVal,index,arr);
  return sumVal+curVal;
},0)
// 输入
0 1 0 [1,2,3,4]
1 2 1 [1,2,3,4]
3 3 2 [1,2,3,4]
6 4 3 [1,2,3,4]

tips:如果不填写 initValue,当数组为空时会报错,因为初始循环时,数组中找不到元素,sumVal 无奈定义,所以在应用 reduce 时,加上 initValue 更平安。

·简写 reduce

var sum = arr.reduce((x,y) => x+y)

上例就是求数组之和,当函数体只有一个表达式时,能够省略 {} 与 return。

·initValue 能够是根本类型,也能够是一个数组或一个对象,举例:
1、计算数组中每个元素呈现的次数

    let nameNum = names.reduce((pre,cur)=>{if(cur in pre){pre[cur]++
        }else{pre[cur] = 1 
        }
        return pre
    },{})
    console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

2、数组去重

    let sum = arr.reduce((x,y)=>{if(!x.includes(y)){x.push(y);
        }
        return x;
    },[])
    console.log(sum); //[1,2,5,4]

3、对象求和

        {
            subject: 'math',
            score: 10
        },
        {
            subject: 'chinese',
            score: 20
        },
        {
            subject: 'english',
            score: 30
        }
    ];
    var sum = arr.reduce(function(x, y) {return y.score + x;}, 0);
    console.log(sum); //60
正文完
 0