es6具有set的唯一对象数组

时间:2016-10-12 11:07:12

标签: javascript arrays ecmascript-6

我遇到了这个用es6

创建唯一数组的例子
[ ...new Set(array) ]

在我尝试使用一组对象并且它没有返回唯一数组之前,这似乎工作正常。

let item = [ ...new Set([{id:123,value:'test'},{id:123,value:'test'}]) ];

为什么?

3 个答案:

答案 0 :(得分:8)

  

为什么?

根据documentation

  

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

现在Set构造函数中每个数组的引用都不同,因此构造函数不会将它们视为唯一值。

答案 1 :(得分:4)

这将有效:

let objectReference = {id:123,value:'test'}
let uniqueArray = [...new Set([objectReference, objectReference])]

>> [{id:123,value:'test'}]

你在做什么:

let objRef1 = {id:123,value:'test'} // creates a reference to a location in memory
let objRef2 = {id:123,value:'test'} // creates a new reference to a different place in memory

let uniqueArray = [...new Set([objRef1, objRef2])]

>> [{id:123,value:'test'},{id:123,value:'test'}]

答案 2 :(得分:2)

你可以尝试

let arr = [{id:1},{id:1},{id:2}];
uniqueArray(arr) //[{id:1},{id:2}]

我知道它很难看,但在大多数情况下除了在你的对象参数中有新的Date(),然后在stringify上转换为ISO字符串。

然后做

omniauth-linkedin-oauth2 (0.2.5)
devise (4.4.1)