2019-06-28|2019-06-28 reduce学习

借鉴:https://www.jianshu.com/p/e375ba1cfc47
2019-06-28 reduce学习
说明:reduce(callback,init)。
callback有四个参数:prev(上次调用返回的值或者是init),cur(当前的值),index(当前值的索引),arry(调用reduce的数组)
【2019-06-28|2019-06-28 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)

    推荐阅读