首页IT科技javascript reduce(在 js 中,reduce() 的详解 以及使用方法)

javascript reduce(在 js 中,reduce() 的详解 以及使用方法)

时间2025-06-20 04:14:34分类IT科技浏览4231
导读:reduce(): reduce()方法为归并类方法,最常用的场景就是,计算数组中的每一项的总和。...

reduce():

reduce()方法为归并类方法             ,最常用的场景就是                    ,计算数组中的每一项的总和             。

reduce() 方法会遍历数组的每一项       ,他接收两个参数:

第一个参数:每次遍历都会调用的函数      ,而这个函数有接收四个参数                    ,分别是:前一个值             、当前项                    、项目的索引和数组对象              ,而这个函数的返回值      ,回传给下一次遍历时                   ,执行的这个方法的第一个参数                    。

第二个参数:归并基础的初始值

我们看一下例子: reduce()怎么用?

let arr = [1,2,3,4,5] arr.reduce((prev,cur)=>{ return prev+cur })

上面的这段代码              ,是用来计算数组总和的,reduce()方法中                   ,只传了第一个参数                    ,也就是只传了一个函数,但第二个参数       、初始值没有传             ,当第二个值没有传的时候                    ,第一次循环       ,prev的值             ,默认为数组的第一项                    ,而cur的值为数组的第二项       ,也就是第一次循环      ,会return 1+2                    ,这个时候              ,第一次循环返回的结果回传给下一次循环中方法的第一个参数      ,也就是说      、第二次循环方法中prev的值                   ,是第一次循环方法返回的结果

let arr = [1,2,3,4,5] arr.reduce((prev,cur)=>{ return prev+cur },10)

我们传入一下第二个参数              ,第一个循环,prev的值为reduce的第二个参数                   ,也就是"归并基础的初始值"                    ,而cur的值为数组的第一项,第一项循环会返回10+1

总结:

1.当reduce()方法的第二个值为空时             ,第一次循环方法中的第一个参数(prev)为数组的第一项值                    ,第二个参数(cur)为数组的第二项值       ,反之             ,第一次循环方法中的第一个参数(prev)为reduce的第二个参数值                    ,第二个参数(cur)为数值的第一项值       。

2.reduce()方法的第一个参数       ,就是每次遍历都会执行的匿名函数      ,当前函数的返回值就会传给下一次执行函数的第一个值      。也就是prev

reduce 应用场景:

1.数组里所有值的和

var arr = [0,1,2,3]; var value = arr.reduce((pre, cur) => { return pre + cur; }, 0); console.log(value);// 输出:6

2.累加数组中对象的值

var arr = [{ x: 1 }, { x: 2 }, { x: 3 }]; var value = arr.reduce((pre, cur) => { return pre + cur.x; }, 0); console.log(value);// 输出:6

3.将二维数组转为一维数组

var arr = [ [0, 1], [2, 3], [4, 5], ]; var value = arr.reduce((pre, cur) => { return pre.concat(cur); }, []); console.log(value); // 输出:[0, 1, 2, 3, 4, 5]

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

var arr = ["a", "b", "a", "c", "c", "c"]; var value = arr.reduce((pre, cur) => { if (cur in pre) { pre[cur]++; } else { pre[cur] = 1; } return pre; }, {}); console.log(value); // 输出:{a: 2, b: 1, c: 3}

5.按属性对object分类

var people = [ { name: "tom", age: 17, birthYear: 2021 }, { name: "tony", age: 21, birthYear: 2021 }, { name: "bob", age: 18, birthYear: 2020 }, { name: "bob", age: 18, birthYear: 2021 }, { name: "bob", age: 18, birthYear: 2019 }, ]; function groupBy(arr, property) { if (!Array.isArray(arr)) return []; return arr.reduce((pre, obj) => { var newObj = { [property]: obj[property], data: [obj], }; if (!pre.length) { return [newObj]; } for (let i = 0; i < pre.length; i++) { let item = pre[i]; if (item[property] === obj[property]) { item.data = [...item.data, obj]; return pre; } } return [...pre, newObj]; }, []); } var value = groupBy(people, "birthYear");

返回值:

 6.数组去重:

var arr = [1, 2, 3, 2, 2, 3, 5, null, null, 0, false, false, true]; var value = arr.reduce((pre, cur) => { return pre.includes(cur) ? pre : pre.concat(cur); }, []); console.log(value);//[1, 2, 3, 5, null, 0, false, true]

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网站快速排名的秘密(揭秘网站排名的5大关键因素) 网站seo推广方案(网站优化推广流程)