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 545391的重复对象对中的任何一个,以将数组缩小为:

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和字符串名称的对象时,此方法才有效。不检查加深的物体或其他键

09-07 17:00
查看更多