我有一个对象的对象,其中一些对象具有相似的属性(例如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;
}
有什么想法吗?
答案 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