我怎样才能打开这个对象数组(其中有一些重复的对象):
items =
[
{ TYPEID: 150927, NAME: 'Staples', COLOR: 'Silver' },
{ TYPEID: 1246007, NAME: 'Pencils', COLOR: 'Yellow' },
{ TYPEID: 1246007, NAME: 'Pencils', COLOR: 'Blue' },
{ TYPEID: 150927, NAME: 'Staples', COLOR: 'Black' },
{ TYPEID: 1248350, NAME: 'Staples', COLOR: 'Black' },
{ TYPEID: 1246007, NAME: 'Pencils', COLOR: 'Blue' },
{ TYPEID: 150927, NAME: 'Staples', COLOR: 'Silver' },
{ TYPEID: 150927, NAME: 'Fasteners', COLOR: 'Silver' }
]
进入这个:
items =
[
{ TYPEID: 150927, NAME: 'Staples', COLOR: 'Silver' },
{ TYPEID: 1246007, NAME: 'Pencils', COLOR: 'Yellow' },
{ TYPEID: 1246007, NAME: 'Pencils', COLOR: 'Blue' },
{ TYPEID: 150927, NAME: 'Staples', COLOR: 'Black' },
{ TYPEID: 1248350, NAME: 'Staples', COLOR: 'Black' },
{ TYPEID: 150927, NAME: 'Fasteners', COLOR: 'Silver' }
]
...通过过滤掉两个重复的对象(银色订书钉和蓝色铅笔)?
似乎应该有一个简单的方法来做到这一点,但我还没有找到一个简单的解决方案。
我见过一些 javascript / jquery 代码可以做到这一点,但我不是最擅长将它们转换成咖啡脚本。
更新:
通常会有不同的对象具有非常相似的属性。
在实际应用中,每个对象都有 25 个属性的潜力。
如果每个属性都相等,我只想删除对象。
更新 2
这是最终为我工作的代码 - (感谢rjz)
unique = (objAry, callback) ->
results = []
valMatch = (seen, obj) ->
for other in seen
match = true
for key, val of obj
match = false unless other[key] == val
return true if match
false
objAry.forEach (item) ->
unless valMatch(results, item)
results.push(item)
callback null, results
这就是我所说的:
unique items, (err, items) ->
console.log items