2019-06-28 reduce学习

借鉴:https://www.jianshu.com/p/e375ba1cfc47
2019-06-28 reduce学习
说明:reduce(callback,init)。

callback有四个参数:prev(上次调用返回的值或者是init),cur(当前的值),index(当前值的索引),arry(调用reduce的数组)

init:第一次调用callback的第一个函数

用法:
1、初始值提供?

arr = [1,2,3,4]; arr.reduce(callback,init)

不提供init值,reduce从索引1的地方执行callback

提供init值0,reduce从索引0的地方执行callback

2、数组为空,初始值提供?

arr=[];arr.reduce(callback,init)
不提供init值,直接报错"TypeError: Reduce of empty array with no initial value"
提供init值0,不报错

3、求和:

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

4、求乘积

arr.reduce((x,y)=>x*y)

5、求元素出现次数

let names = ['zhangsan','lisi','wangwu','lisi']
let nameNum = names.reduce((pre,cur)=>{
    if(cur in pre){
        pre[cur]++
    } else {
        pre[cur]=1
   }
   return pre
},{})

6、数组去重

let names = ['zhangsan','lisi','wangwu','lisi'];
let newArr = names.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
         return pre.concat(cur)
    } else {
         return pre
    }
},[])

7、将二维数组转换为一维数组

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

8、将多维数组转换为一维

let arr = [0,[1,2],[3,[4,5]]];
let newArr = (arr)=>{
    arr.reduce((pre,cur)=>{
        pre.concat(Array.isArray(cur)?newArr(cur):cur)
},[])
}

9、对象里的属性求和

let result = [{name:'zhangsan',age:12},{name:'lisi',age:14},{name:'wangwu',age:18}];
let ageSum = result.reduce((pre,cur)=>{
     pre = cur.age+pre
},0)

你可能感兴趣的:(2019-06-28 reduce学习)