数组的reduce方法常用的几种情形

1、语法

arr.reduce(function(prev,cur,index,arr){
    ...
}, init);

arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值,若没有提供init值,初始时prev为数组第一项,cur为第二项。

2、常用情形

(1)数组求和

<script type="text/javascript">
     const arr = [1,2,3,4];
     const sum1 = arr.reduce((pre, cur)=>{
         return pre + cur;
     })
     console.log(sum1); // 10=1+2+3+4

     const sum2 = arr.reduce((pre, cur)=>{
         return pre + cur;
     }, 1)
     console.log(sum2); // 11=1+1+2+3+4
</script>

(2)计算数组中最大值

var arr = [3,9,4,3,6,0,9];
var max = arr.reduce(function (prev, cur) {
    return Math.max(prev,cur);
});

(3)计算数组中每个元素出现的次数

<script type="text/javascript">
    const arr = ['a','b','a','c','b','a','c'];
    const count = arr.reduce((pre, cur)=>{
        if(cur in pre) {
            pre[cur]++;
        } else {
            pre[cur] = 1;
        }
        return pre
    },{})
    console.log(count);  // {a: 3, b: 2, c: 2}
</script>

(4)数组去重

<script type="text/javascript">
    const arr = ['a','b','a','c','b','a','c'];
    const newArr = arr.reduce((pre, cur)=>{
        if (!pre.includes(cur)) {
            return pre.concat(cur)
        } else {
            return pre
        }
    },[])
    console.log(newArr);  // ["a", "b", "c"]
</script>

(5)数组扁平化

<script type="text/javascript">
    const arr = [1,[2,3,4,[5,6,7]],8];
    const newArr = (arr) => {
    return arr.reduce((pre, cur)=>{
        return pre.concat(Array.isArray(cur) ? newArr(cur) : cur) 
    },[])
    }
    console.log(newArr(arr));  // [1, 2, 3, 4, 5, 6, 7, 8]
</script>
posted @ 2021-08-26 15:52  BAHG  阅读(75)  评论(0编辑  收藏  举报