如何从对象的对象中删除重复项

时间:2020-04-09 18:43:52

标签: javascript duplicates javascript-objects

我有一个对象的对象,其中一些对象具有相似的属性(例如tempId),并且它们的key是从对象的id属性中获取的,如何删除重复项(对于具有类似tempId的对象),只剩下一个带有id键集的对象。例如,如果我在下面有这个对象:

{
 '' => { id: '', tempId: 'abcde', name: 'king', age: 5 },
 'aSaJsk' => { id: aSaJsk, tempId: 'abcde', name: 'king', age: 5 }
}

我想退货:

{
 'aSaJsk' => { id: aSaJsk, name: 'king', age: 5 }
}

此刻,我尝试使用此方法,但它会返回出现在对象中的第一个重复项。

function removeDuplicates(myObj) {
  const obj = keyBy(uniqBy(Object.values(myObj), "tempId"), "id");
  const messages = Object.assign({}, obj);
  return messages;
}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我不确定这是否是您要寻找的东西。

const mainObject = {
            '': {
                id: '',
                tempId: 'abcde',
                name: 'king',
                age: 5
            },
            'aSaJsk': {
                id: 'aSaJsk',
                tempId: 'abcde',
                name: 'king',
                age: 5
            }
        };


Object.keys(mainObject).forEach(key => {
        if ('tempId' in mainObject[key] && !mainObject[key].id){
                delete mainObject[key];
        }
});

此代码将删除所有具有tempId但没有id的对象,如果有两个以上的对象具有相同的{,我不确定如何处理您的问题{1}},但其中只有一个没有tempId。如果您想要除ID外的其他人,那么这个答案也可以为您服务。

我希望这对您有所帮助,并随时澄清您的问题,以便为您提供更兼容的解决方案。

答案 1 :(得分:0)

您可以通过使用share并检查减速器累加器中是否存在任何重复值来完成此操作。如果有,则跳过它,否则将其推入。

在这里,我使用Object.entries()将对象转换为数组,还使用Object.fromEntries()将数组转换为对象。

reduce