在这种形式中,我有一个数组对象:
[
{id : #mixed char and num , title : #string },
{id : #mixed char and num , title : #string } ...]我想遍历它并删除重复的对象,我使用了Set结构来进行迭代,但是问题是Set add运算符将接受我尝试过的复制对象。
let Unique = new Set([], X => x.id)但帮不上忙
发布于 2017-12-27 14:59:30
正如参考文献所说,
Set对象允许存储任何类型的唯一值,无论是原始值还是对象引用。
如果这些是不同的对象引用,它们就不会被重复。如果需要用id唯一键来标识对象,那么Set是错误的选择。地图可以达到这一目的:
new Map([
[#mixed char and num, {id : #mixed char and num , title : #string }],
...
])如果对象只包含id和title,则可以将映射简化为:
new Map([
[#mixed char and num, #string],
...
])发布于 2017-12-27 14:45:56
您可以使用.filter删除所有副本。
let uniqueArr = arr.filter((item, index) => {
return arr.findIndex(item2 => item2.id === item.id) === index;
});降低概念的小提琴:https://jsfiddle.net/4oanw972/
发布于 2017-12-27 14:57:03
您可以将reduce与map of esmascript 6一起使用,然后将值传递给Set构造函数。但是,您也可以使用普通的Object,Object.values中的es6
new Set(arr.reduce((map,item)=>map.set(item.id, item), new Map()).values());正如您所知道的,您是由id标识唯一的,所以只需创建一个键,其中id指向实际对象,因此前面的对象具有相同的id,它将覆盖该对象,最后每个id只有一个对象,然后只获取值并构造您的集合。
https://stackoverflow.com/questions/47993993
复制相似问题