一文带你彻底搞懂js的Array.prototype.reduce()方法!_SCUhzs-CSDN博客
这篇文章非常详细,建议看上面的链接。这里我仅作一些简单的理解。
const a = [1,2,3,4,5]
a.reduce((pre, current)=>{
console.log(pre);
})
上面这段代码的输出结果是
导致undefined出现的原因是:在第一次调用的时候pre是1 ,但是第二次调用的pre,使用的是第一次调用的返回值。在这里第一次调用并没有返回值,所以显示的是undefined。
明明数组中有五个元素,最后只有四个输出的原因是:在第一次打印的时候pre为1,current为2;接下来pre为undefined,current为3.......直到current为5,最终只有四个输出。
通常可以用reduce来筛选todo中完成的有多少项,成绩大于90的有多少人这样的问题,这时候可以用到reduce的第二个参数。
const a = [3,5,7,9,11]
const res = a.reduce((pre, current)=>{
console.log(pre,current);
return pre + 1
},0)
console.log(res);
这样的输出结果为
通过第二个参数设置pre的值为0,current的值就顺延至数组的第一个元素值1。这里最后一个输出结果5的原因是:最后一次遍历结果的返回值作为reduce的值。
现在假设需要对一个todoList的完成项做一个筛选,以前考虑的是filter后获取length,现在试试reduce。
const todoList = [
{id: 1, done: false},
{id: 2, done: true},
{id: 3, done: true},
{id: 4, done: false},
{id: 5, done: true},
]
const res = todoList.reduce((pre, current)=>{
return pre + (current.done ? 1 : 0)
},0)
console.log(res); // 3