【问题标题】:How can I remove duplicates from objects of object如何从对象的对象中删除重复项
【发布时间】:2020-07-22 11:35:23
【问题描述】:

我有一个对象对象,其中一些对象具有相似的属性(例如tempId),它们的key 是从对象的id 属性中获得的,我如何删除重复项(具有相似@ 的对象987654325@) 只留下带有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;
}

有什么想法吗?

【问题讨论】:

标签: javascript duplicates javascript-objects


【解决方案1】:

我不太确定这是否是您要查找的内容。

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 的对象,如果有两个以上具有相同tempId 的对象,我不确定您会如何处理您的问题,但只有其中一个没有id。如果您想要其他人,除了没有 id 的人,那么这个答案也会为您服务。

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

【讨论】:

    【解决方案2】:

    您可以通过使用reduce 并检查reducer 累加器中是否存在任何重复值来做到这一点。如果有则跳过,否则推送。

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

    const data = {
     'sdkad': { id: 'sdkad', tempId: 'abcde', name: 'king', age: 5 },
     'aSaJsk': { id: 'aSaJsk', tempId: 'abcde', name: 'king', age: 5 },
     '4dkj': { id: '4dkj', tempId: 'cde', name: 'king', age: 5 },
    };
    
    
    const res = Object.fromEntries(Object.entries(data).reduce((res, [key, val]) => {
      if (!res.find(v => v[1].tempId === val.tempId)) {
         res.push([key, val]); 
      }
      return res;
    }, []));
    
    console.log(res);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-05
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      相关资源
      最近更新 更多