比较对象数组并删除重复项

时间:2017-12-13 09:06:34

标签: javascript arrays reactjs

我有一个一个包含对象数组的数组,我需要比较它。

我查看了多个相似的主题,但我找不到比较多个对象数组的正确主题(大多数是比较两个对象数组或只是比较单个数组中的对象)

这是数据(下面是带代码示例的JSFiddle)

const data = [  
  [  
    {  
      "id": "65",
      "name": "Some object name",
      "value": 90
    },
    {  
      "id": "89",
      "name": "Second Item",
      "value": 20
    }
  ],
  [  
    {  
      "id": "89",
      "name": "Second Item",
      "value": 20
    },
    {  
      "id": "65",
      "name": "Some object name",
      "value": 90
    }
  ],
  [  
    {  
      "id": "14",
      "name": "Third one",
      "value": 10
    }
  ]
]

我想删除所有重复的对象数组,无论data的长度如何(可能会有更多记录)。

我设法将唯一的提取物提取到对象中:

const unique = data.reduce(function(result, obj) {
    return Object.assign(result, obj)
}, [])

但这并不适合我,因为我需要保留一个重复的数组,并且返回的数据也是一个数组,而不是一个对象。 E.g:

// result I need
[  
  [  
    {  
      "id":"65",
      "name":"Some object name",
      "value":90
    },
    {  
      "id":"89",
      "name":"Second Item",
      "value":20
    }
  ],
  [  
    {  
      "id":"14",
      "name":"Third one",
      "value":10
    }
  ]
]

那么如何将每个对象数组与父数组中的其他数组进行比较并保留每个重复或唯一对象数组中的一个?

JSFiddle

2 个答案:

答案 0 :(得分:0)

你可以通过使用function来实现。如下所示。不确定这样做的最佳方式。

var testArray = [  
  [  
    {  
      "id": "65",
      "name": "Some object name",
      "value": 90
    },
    {  
      "id": "89",
      "name": "Second Item",
      "value": 20
    }
  ],
  [  
    {  
      "id": "89",
      "name": "Second Item",
      "value": 20
    },
    {  
      "id": "65",
      "name": "Some object name",
      "value": 90
    }
  ],
  [  
    {  
      "id": "14",
      "name": "Third one",
      "value": 10
    }
  ]
]

function removeDuplicatesFromArray(arr){

 var obj={};
 var uniqueArr=[];
 for(var i=0;i<arr.length;i++){ 
    if(!obj.hasOwnProperty(arr[i])){
        obj[arr[i]] = arr[i];
        uniqueArr.push(arr[i]);
    }
 }

return uniqueArr;

}
var newArr = removeDuplicatesFromArray(testArray);
console.log(newArr);

答案 1 :(得分:0)

&#13;
&#13;
const data = [  
  [  
    {  
      "id": "65",
      "name": "Some object name",
      "value": 90
    },
    {  
      "id": "89",
      "name": "Second Item",
      "value": 20
    }
  ],
  [  
    {  
      "id": "89",
      "name": "Second Item",
      "value": 20
    },
    {  
      "id": "65",
      "name": "Some object name",
      "value": 90
    }
  ],
  [  
    {  
      "id": "14",
      "name": "Third one",
      "value": 10
    }
  ]
];

const temp = {};
const result = [];

data.forEach(itemArr => {
  const items = itemArr.filter(item => {
    const isUnique = temp[`${item.id}-${item.name}-${item.value}`] === undefined;
    
    temp[`${item.id}-${item.name}-${item.value}`] = true;
    return isUnique;
  });
  if (items.length !== 0)
    result.push(items);
});

console.log(result);
&#13;
&#13;
&#13;