数组中的reduce方法

        reduce相当于一个累计器,将累计器逐个作用在数组元素上,把上一次输出的值作为下一次输入的值。它接收两个参数,第一个参数callback为回调函数(必选),第二个参数initialValue为初始值(可选)。

        回调函数接收4个参数:total 回调函数返回的累积值(必选),value 当前处理的数组元素(必选),index 当前数组元素的索引值(可选),array 调用reduce()的数组(可选)。回调函数第一次执行时,如果调用reduce()时提供了initialValuetotal取值为initialValuevalue取数组中的第一个值;如果没有提供 initialValue,那么total取数组中的第一个值,value取数组中的第二个值。

        reduce的一些用法,注:reduce不会改变原数组

1.数组去重

let a=[1,1,2,2,3,3]
let b=a.reduce((t,v)=>t.includes(v)?t:[...t,v],[])

console.log(a)//[1,1,2,2,3,3]
console.log(b)//[]1,2,3]

2.数组降维

let a = [
                [1, 1],
                [2, 2],
                [3, 3]
        ]
//let b = a.reduce((t, v) => [...t, ...v], [])
let b = a.reduce((t, v) => t.concat(v), [])

console.log(b) //[ 1, 1, 2, 2, 3, 3 ]

3.求数组最大最小值

let a = [1, 2, 3, 4, 5]
let b = a.reduce((t, v) => t > v ? t : v)
let c = a.reduce((t, v) => t < v ? t : v)

onsole.log(b);//5
console.log(c);//1

4.计算数组元素出现的次数

let a = [1, 1, 2, 2, 3, 3]
let b = a.reduce((t, v) => (t[v] = (t[v] || 0) + 1, t), {})

console.log(b); //{ 1: 2, 2: 2, 3: 2 }

5.实现filter

Array.prototype.myFilter = function(handler) {
            if (typeof handler !== 'function') {
                console.log(new Error('handler is not a function'));
            }
            return this.reduce((t, v) => handler(v) ? [...t, v] : t, [])
        }
        var arr = [1, 2, 3, 4, 5]
        var arr1 = arr.myFilter(item => item > 3)
        console.log(arr1); //[4,5]

6.实现map

Array.prototype.myMap = function(handler) {
            if (typeof handler !== 'function') {
                console.log(new Error('handler is not a function'));
            }
            return this.reduce((t, v) => [...t, handler(v)], [])
        }
        var arr2 = [1, 2, 3, 4, 5]
        var arr12 = arr.myMap(item => item * 3)
        console.log(arr12); //[3,6,9,12,15]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值