前些日子,朋友问了我一个问题,reduce()熟悉,我还纳闷,这玩意儿不是网上一搜一大堆嘛。
然后丢了2个图过来。
然后就呱啦呱啦叽哩,叽哩叽哩呱啦,不要蒜~的解释了一通。
OK。我们先看菜鸟给出的文档。
这图片就这么大。。。真的。我也想多加点文字。但是。。。。。
我们先明白,reduce本身是一个循环,不会对空数组执行,然后是一个累加器。
在明白一个问题,用扩展运算符去改变对象的值是通过{...obj, id: '值'}这种方式去做修改。
带着答案我们去看问题,为什么2个一样的,只返回后面那个。
const temp = ['id', '999', 'id'].reduce((obj, item, i) => {
return { ...obj, [item]: i }
}, {})
console.log(temp) // 输出{999: 1, id: 2}
下标为0的时候,{}的值是{id: 0}
下标为1的时候,{}的值是{id: 0,999: 1 }, 因为对象里面没有999这个属性,所以添加进去
下标为2的时候,循环结束,{}的值为{999: 1, id: 2} 因为对象中已经存在id这个属性,可以理解成,下标为2的id,替换了之前的id:0的值
reduce的参数中,obj为初始值,item是数组值,i是下标