2019-06-28 reduce学习

借鉴://www.greatytc.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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容