2017-04-14 11 views
0

我有几个对象都是不同的,但都有一个id字段。我想创建一个Set()来保存这些,但我不知道如何将该字段指定给Set构造函数/ prototype/etc。这是可行的吗?JavaScript设置()与特定密钥散列在

比方说,我有两种类型的对象(我给打字稿定义为简单起见):

interface Thing1 { 
    id: string; 
    someData: string[] 
} 

interface Thing2 { 
    id: string; 
    someString: string; 
    someOtherString: string 
} 

现在,我有这些东西两个数组,我们姑且称之为

array1: Thing1[]; 
array2: Thing2[]; 

我想要做的是创建一个new Set(array1)然后add每个Thing2array2,执行两个数组的条件合并。

每个这些中的唯一键是id字段 - 我希望有一些重载的构造函数或类似的模式,可以给一个lambda(la new Set(array1, (item) => item.id),也许),它将指定密钥散列的身份。

+0

你的问题不是很清楚。更好地解释自己,然后添加代码以显示您想要实现的目标 –

+1

这是您要问的问题? http://stackoverflow.com/questions/29759480/how-to-customize-object-equality-for-javascript-set – user886

+0

@Andrew是的,这是粗略的 - 谢谢。 –

回答

0

与设置工作是非常简单的...

假设你有两个对象,像这样:

const obj1 = { 
    id: 1, 
    prop: 'Foo' 
}; 

const obj2 = { 
    id: 2, 
    prop: 'Bar' 
}; 

要创建您的设置与这些对象的引用,你可以这样做:

let set = new Set([obj1, obj2]); 

或者说:

let set = new Set(); 
set.add(obj1).add(obj2); 

由于设置是一个迭代的对象,你可以使用一个for...of循环获取所有数据:

for (const obj of set) { 
    console.log(`${obj.id}:${obj.prop}`); 
} 
+0

不完全是我的意思 - 我添加了一些例子,但它看起来像答案只是“你不能在JS中做到这一点” –

+1

哦,我明白了......对不起,你的描述有点不清楚。我以为你想知道如何以传统的方式使用数据结构。 ;) – Badacadabra