Fiddle Example:
我有一个这样的对象数组:
var bigarr =
[
[ { name: 'ABC',id: 391},{ name: 'XYZ',id: 545}],
[ { name: 'EFG',id: 390},{ name: 'XYZ',id: 545}],
[ { name: 'XYZ',id: 545},{ name: 'ABC',id: 391}],
[ { name: 'ABC',id: 391},{ name: 'XYZ',id: 545}]
];
如何删除具有id
545
和391
的重复对象对中的任何一个,以将数组缩小为:var newbigarr =
[
[ { name: 'ABC',id: 391},{ name: 'XYZ',id: 545}],
[ { name: 'EFG',id: 390},{ name: 'XYZ',id: 545}]
];
我曾想过通过制作新的数组列表来过滤出重复的对:
[{391: 391,545: 545},{390: 390,545: 545}]
然后遍历它和
bigarr
以构建newbigarr
,但是我的代码甚至无法创建该列表。var test_id = [];
for(var i = 0;i < bigarr.length;i++)
{
var value_obj = {};
for(var j in bigarr[i])
{
var value = bigarr[i][j]["id"];
value_obj[value] = value;
}
test_id.push(value_obj);
}
console.log(test_id);
我正在使用lodash,因此欢迎任何涉及lodash的解决方案。
最佳答案
如果使用下划线,则可以执行以下操作:
var bigarr =
[
[ { name: 'ABC',id: 391},{ name: 'XYZ',id: 545}],
[ { name: 'EFG',id: 390},{ name: 'XYZ',id: 545}],
[ { name: 'XYZ',id: 545},{ name: 'ABC',id: 391}],
[ { name: 'ABC',id: 391},{ name: 'XYZ',id: 545}]
];
console.log(_.uniq(bigarr,function(item){
return [
[item[0].id+item[0].name],
[item[1].id+item[1].name]
].sort().toString()
}))
编辑:仅当您始终具有一对具有ID和字符串名称的对象时,此方法才有效。不检查加深的物体或其他键