数组方法,reduce()

996 阅读1分钟

前些日子,朋友问了我一个问题,reduce()熟悉,我还纳闷,这玩意儿不是网上一搜一大堆嘛。

然后丢了2个图过来。

lADPJxf-vGZDkfDNBkjNAss_715_1608.jpg

lADPJwKtxImckffNBDjNB4A_1920_1080.jpg

lADPJwY7Qy5jEgLNBDjNB4A_1920_1080.jpg

然后就呱啦呱啦叽哩,叽哩叽哩呱啦,不要蒜~的解释了一通。

OK。我们先看菜鸟给出的文档。

image.png

这图片就这么大。。。真的。我也想多加点文字。但是。。。。。

我们先明白,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是下标

image.png