对reduce方法的困惑

257 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情

🏆数组.reduce()

  • 功能: 用于对数组进行遍历,并进行统计
  • 语法:

数组.reduce(function(){},初始值)

数组.reduce(function(pre,item,index){

},初始值)

注意:

  1. reduce会重复调用function(pre,item,index){}
  2. reduce在首次调用时会将 初始值 传递给 pre
  3. 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)

几点困惑:

  1. reduce函数为什么要两个参数?
  2. return 之后的值为什么会赋值给pre
  3. 第二个参数不写之后为什么遍历次数会减一

总结:

  1. reduce,多用于数组求和,但是也可以用于其他功能,和map,find函数一样,都自带遍历数组的功能
  2. reduce有两个参数,
  • 第一个参数是回调函数function(pre,item,index){},
  • 第二个参数是初始值,可以不设第二个参数,数组的第一个值就会被赋值给回调函数中的item,遍历会从第二个数组元素开始遍历,遍历次数减一

  3.return不写则除了第一个pre,pre后续为undefined

 return后面的值会每次重新赋给pre,reduce的返回值是最后的pre;

类似于pre=(return后面的计算式)