如何在js中使用concat reduce和find



我试图在JS中使用concat reduce和filter。我发现了一个练习,我可以使用同样的三种方法。我也找到了一个解。但我不能完全理解这是怎么回事。我通过保持断点进行调试,我理解了它的某些部分,但不是完全理解。谁能帮我弄明白下面的逻辑是如何工作的?提前谢谢。

var item1 = [
{"id":1,"b":"first"},
{"id":2,"b":"second"}
];

var item2 = [
{"id":3,"b":"third", "c":true},
{"id":1,"b":"fourth", "c":true}, 
{"id":2,"b":"fivth", "c":true},
{"id":4,"b":"frr", "c":true}
];

var res = item1.concat(item2).reduce((aggr, el)=>{
// console.log("aggr", aggr)
if(!aggr.find(item2=>item2.id==el.id))
return [...aggr, el];
else
return aggr
},[])
  1. item1.concat(item2)=我明白我正在连接item1和第二条。
  2. .reduce=我知道减少将接受2个参数一个是另一个是currentvalue,这里aggr是acc, el是currentvalue。
  3. 我没有在里面得到!aggr的逻辑。"aggr inside find"是什么意思我得到他们正在检查相同的ID,但在此之前!聚合是令人困惑的。

简而言之,在连接两个数组之后,它从连接的数组中减少/删除与item2数组具有相同id的项。

供参考,在每次迭代中,aggr由reduce方法返回的前一次迭代值组成,el由连接数组的当前值组成。

aggr.find(item2=>item2.id==el.id)返回聚合体中id与el相同的第一个元素。如果没有找到,则返回undefined。!aggr.find()将在查找返回undefined时为true。

如果条件为真,则使用aggr添加el元素,并使用return [...aggr, el]语句返回值。否则,它只返回聚合。

我希望这对你有帮助。如果你有更多的困惑,请告诉我!

最新更新