1.1 reduce(fn,value):
第一个参数是一个函数,每次遍历都会调用的函数
代码语言:txt复制// 回调函数的参数代码语言:txt复制fn(preview,current,index,arr){代码语言:txt复制 // 第一个参数是前一个值代码语言:txt复制 // 第二个参数是当前值代码语言:txt复制 // 第三个参数是当前元素索引代码语言:txt复制 // 第四个参数是引用的数组代码语言:txt复制}第二个参数是:归并基础的初始值
2.reduce()方法一个参数和两个参数的区别
2.1 只传一个参数
代码语言:txt复制let arr = [2 ,4 ,5,3,1]代码语言:txt复制let result = arr.reduce((preview, current) => {代码语言:txt复制 return preview current代码语言:txt复制})代码语言:txt复制console.log(result) //15上面的代码用于计算数组的总和。reduce方法之传入了匿名函数,函数只接收两个参数,分别是前一个值preview,当前值current。当reduce方法没有传入第二个参数时,第一次循环的前一个值为数组的第一项,当前值则为数组的第二项。。函数返回的是preview
- current的结果会成为第二次循环preview的值,此时的当前值则为数组的第三项。后面的循环以此类推。
let arr = [2 ,4 ,5,3,1]代码语言:txt复制let result = arr.reduce((preview, current) => {代码语言:txt复制 console.log('前一个值:' preview)代码语言:txt复制 console.log('当前值是:' current)代码语言:txt复制 return preview current代码语言:txt复制})代码语言:txt复制console.log(result)代码语言:txt复制// 前一个值:2代码语言:txt复制// 当前值是:4(第一次循环)代码语言:txt复制// 前一个值:6代码语言:txt复制// 当前值是:5(第二次循环)代码语言:txt复制// 前一个值:11代码语言:txt复制// 当前值是:3(第三次循环)代码语言:txt复制// 前一个值:14代码语言:txt复制// 当前值是:1(第四次循环)代码语言:txt复制// 15(最终返回的值)2.2传两个参数
代码语言:txt复制let arr = [2 ,4 ,5,3,1]代码语言:txt复制let result = arr.reduce((preview, current) => {代码语言:txt复制 console.log('前一个值:' preview)代码语言:txt复制 console.log('当前值是:' current)代码语言:txt复制 return preview current代码语言:txt复制}, 10)代码语言:txt复制console.log(result)代码语言:txt复制// 前一个值:10代码语言:txt复制// 当前值是:2(第一次循环)代码语言:txt复制// 前一个值:12代码语言:txt复制// 当前值是:4(第二次循环)代码语言:txt复制// 前一个值:16代码语言:txt复制// 当前值是:5(第三次循环)代码语言:txt复制// 前一个值:21代码语言:txt复制// 当前值是:3(第四次循环)代码语言:txt复制// 前一个值:24代码语言:txt复制// 当前值是:1(第五次循环)代码语言:txt复制// 25(最终返回的值)上面的代码reruce方法传入两个参数,此时前一个值为第二个参数的值,当前值为数组的第一项
3. reduce()的应用
3.1 计算数组的和
代码语言:txt复制let arr = [1, 2, 3, 4, 5]代码语言:txt复制let result = arr.reduce((preview,current) => {代码语言:txt复制 return preview current代码语言:txt复制})代码语言:txt复制console.log(recult) // 153.2 简单的数组去重
代码语言:txt复制let arr = [1, 2, 3, 4, 5, 2, 2, 3, 4]代码语言:txt复制let result = arr.reduce((preview,current) => {代码语言:txt复制 if(!preview.includes(current)){代码语言:txt复制 preview.push(current)代码语言:txt复制 }代码语言:txt复制 return preview代码语言:txt复制}, [])代码语言:txt复制console.log(result) // [1, 2, 3, 4, 5]3.3 统计每个值,在数组中出现的次数
代码语言:txt复制let arr = [1, 2, 3, 4, 5, 2, 2, 3, 4]代码语言:txt复制let result = arr.reduce((preview,current) => {代码语言:txt复制 console.log('前一个值:' preview)代码语言:txt复制 console.log('当前值是:' current)代码语言:txt复制 if(preview[current] !== undefined){代码语言:txt复制 preview[current] 代码语言:txt复制 } else {代码语言:txt复制 preview[current] = 1代码语言:txt复制 }代码语言:txt复制 return preview代码语言:txt复制}, {})代码语言:txt复制console.log(result)


