首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象集ecmascript 6 (es6)

对象集ecmascript 6 (es6)
EN

Stack Overflow用户
提问于 2017-12-27 14:37:13
回答 3查看 50关注 0票数 0

在这种形式中,我有一个数组对象:

代码语言:javascript
复制
[
{id : #mixed char and num , title : #string },
{id : #mixed char and num , title : #string } ...]

我想遍历它并删除重复的对象,我使用了Set结构来进行迭代,但是问题是Set add运算符将接受我尝试过的复制对象。

代码语言:javascript
复制
let Unique = new Set([], X => x.id)

但帮不上忙

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-27 14:59:30

正如参考文献所说,

Set对象允许存储任何类型的唯一值,无论是原始值还是对象引用。

如果这些是不同的对象引用,它们就不会被重复。如果需要用id唯一键来标识对象,那么Set是错误的选择。地图可以达到这一目的:

代码语言:javascript
复制
new Map([
  [#mixed char and num, {id : #mixed char and num , title : #string }],
  ...
])

如果对象只包含idtitle,则可以将映射简化为:

代码语言:javascript
复制
new Map([
  [#mixed char and num, #string],
  ...
])
票数 1
EN

Stack Overflow用户

发布于 2017-12-27 14:45:56

您可以使用.filter删除所有副本。

代码语言:javascript
复制
let uniqueArr = arr.filter((item, index) => {
    return arr.findIndex(item2 => item2.id === item.id) === index;
});

降低概念的小提琴:https://jsfiddle.net/4oanw972/

票数 1
EN

Stack Overflow用户

发布于 2017-12-27 14:57:03

您可以将reducemap of esmascript 6一起使用,然后将值传递给Set构造函数。但是,您也可以使用普通的ObjectObject.values中的es6

代码语言:javascript
复制
new Set(arr.reduce((map,item)=>map.set(item.id, item), new Map()).values());

正如您所知道的,您是由id标识唯一的,所以只需创建一个键,其中id指向实际对象,因此前面的对象具有相同的id,它将覆盖该对象,最后每个id只有一个对象,然后只获取值并构造您的集合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47993993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档