携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
🏆数组.reduce()
- 功能: 用于对数组进行遍历,并进行统计
- 语法:
数组.reduce(function(){},初始值)
数组.reduce(function(pre,item,index){
},初始值)
注意:
- reduce会重复调用function(pre,item,index){}
- reduce在首次调用时会将 初始值 传递给 pre
- reduce在其后各次调用时,会将从function(pre,item,index){}接收到的返回值传递给 pre
求和案例:
🏆reduce实现累加求和
// 💎 有初始值时 reduce() 如何运行
let arr = [1, 3, 9, 15, 20];
let ret = arr.reduce(function (pre, item, index) {
return item + pre;//返回值会作为下一次的pre的值
}, 0)
console.log(ret);
//💎 无初始值时 reduce() 如何运行
没有起始值
第一次循环的时候会将数组里面的第一个元素给temp变量item变量就是数组的第二个元素
如果没有起始值 reduce则从数组的第二个元素开始循环/将数组的第一个元素给 temp 变量将数组的第二个元素给 item
如果有起始值 reduce则从数组的第一个元素开始循环将起始值给temp 变量将数组的第一个元素给 item变量
如果回调函数里面没有return则第二次以后temp为undefined
如果回调函数里面 有 return则返回值作为下一次的temp变量的值
const array = [15, 16, 17, 18, 19];
function reducer(previous, current, index, array) {
const returns = previous + current;
console.log(previous: ${previous}, current: ${current}, index: ${index}, returns: ${returns});
return returns;
}
array.reduce(reducer);
\
// 🏆求奇数的个数
let res = arr.reduce(function (pre, item, index) {
if (item % 2 == 1) {
pre++
}
return pre
}, 0)
console.log(res)
几点困惑:
- reduce函数为什么要两个参数?
- return 之后的值为什么会赋值给pre
- 第二个参数不写之后为什么遍历次数会减一
总结:
- reduce,多用于数组求和,但是也可以用于其他功能,和map,find函数一样,都自带遍历数组的功能
- reduce有两个参数,
- 第一个参数是回调函数function(pre,item,index){},
- 第二个参数是初始值,可以不设第二个参数,数组的第一个值就会被赋值给回调函数中的item,遍历会从第二个数组元素开始遍历,遍历次数减一
3.return不写则除了第一个pre,pre后续为undefined
return后面的值会每次重新赋给pre,reduce的返回值是最后的pre;
类似于pre=(return后面的计算式)