Ste*_*ieB 10 javascript arrays ecmascript-6
我遇到了这个用es6创建唯一数组的例子
[ ...new Set(array) ]
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,直到我尝试使用一组对象,它没有返回唯一的数组.
即
let item = [ ...new Set([{id:123,value:'test'},{id:123,value:'test'}]) ];
Run Code Online (Sandbox Code Playgroud)
这是为什么 ?
Vic*_*Vic 14
你可以尝试做
uniqueArray = a => [...new Set(a.map(o => JSON.stringify(o)))].map(s => JSON.parse(s))
Run Code Online (Sandbox Code Playgroud)
我知道它很难看,但在大多数情况下,除了对象参数中有 new Date() 的地方,然后在 stringify 上将其转换为 ISO 字符串。
那么做
let arr = [{id:1},{id:1},{id:2}];
uniqueArray(arr) //[{id:1},{id:2}]
Run Code Online (Sandbox Code Playgroud)
This will work:
let objectReference = {id:123,value:'test'}
let uniqueArray = [...new Set([objectReference, objectReference])]
>> [{id:123,value:'test'}]
Run Code Online (Sandbox Code Playgroud)
What you're doing:
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'}]
Run Code Online (Sandbox Code Playgroud)