我遇到了这个用es6创建唯一数组的例子
[ ...new Set(array) ]
这似乎工作正常,直到我尝试使用一组对象,它没有返回唯一的数组。
即
let item = [ ...new Set([{id:123,value:'test'},{id:123,value:'test'}]) ];
这是为什么 ?
这将有效:
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'}]
你可以尝试做
uniqueArray = a => [...new Set(a.map(o => JSON.stringify(o)))].map(s => JSON.parse(s))
我知道它很难看,但在大多数情况下除了你在对象参数中有新的Date()之外,还有在stringify上转换为ISO字符串。
那么呢
let arr = [{id:1},{id:1},{id:2}];
uniqueArray(arr) //[{id:1},{id:2}]