JS数组reduce方法详解及高级技巧

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

看到这个方法时,学习了下


一、reduce是什么?

JavaScript中关于数组的高阶方法,目前可以使用做,累加、累乘、去重、查看在数组中出现的次数等

arr.reduce(callback,[initialValue])

        

使用方法

callback (执行数组中每个值的函数,包含四个参数) 1、previousValue (上一次调用回调返回的值,或者是提供的初始值/相当于默认值(initialValue)) 2、currentValue (数组中当前被处理的元素) 3、index (当前元素在数组中的索引) 4、array (调用 reduce 的数组) initialValue (作为第一次调用 callback 的第一个参数。)

二、使用方法

1.累加累乘计算方法

代码如下(示例):

   var arr = [1, 2, 3, 4];
    var sum = arr.reduce((x, y) =>{
        console.log( "x--"+x,"y--"+y)
        return x+y
    } )
    var mul = arr.reduce((x, y) => x * y)
    console.log(sum); //求和,10
    console.log(mul); //求乘积,24

2.计算数组中每个元素出现的次数

代码如下(示例):

    let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
    let names = ['a', 'b', 'c', 'n', 'b'];
    let nameNum = names.reduce((pre, cur) => {
        // in 代表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}

3.数组去重

代码如下(示例):

    let arr = [1, 2, 3, 4, 4, 1]
    let newArr = arr.reduce((pre, cur) => {
        console.log(pre, cur)
        // 检测pre数组中是否存在已经存进取的数,
        // pre自定义为数组,一开始为[],当执行一次pre里面加一个

        if (!pre.includes(cur)) {
            // 如果不存在,合并数组
            return pre.concat(cur)
        } else {
            return pre
        }
    }, [])
    console.log(newArr); // [1, 2, 3, 4]

4.将二维数组转化为一维

代码如下(示例):

 let arr = [
        [0, 1],
        [2, 3],
        [4, 5]
    ]
    let newArr = arr.reduce((pre, cur) => {
        return pre.concat(cur)
    }, [])
    console.log(newArr); // [0, 1, 2, 3, 4, 5]

4.将多维数组转化为一维

代码如下(示例):

     let arr = [
        [0, 1],
        [2, 3],
        [4, [5, 6, 7]]
    ]
    const newArr = function (arr) {
        return arr.reduce((pre, cur) => pre.concat(Array.isArray(cur) ? newArr(cur) : cur), [])
    }
    console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

5.对象里的属性求和

代码如下(示例):

     var result = [
        {
            subject: 'math',
            score: 10
        },
        {
            subject: 'chinese',
            score: 20
        },
        {
            subject: 'english',
            score: 30
        }
    ];

    var sum = result.reduce(function (prev, cur) {
        return cur.score + prev;
    }, 0);
    console.log(sum) //60


总结

提示:只要区别pre和cur的关系
来源 https://www.jianshu.com/p/e375ba1cfc47

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值