首页 > 解决方案 > 在Javascript中删除对象中具有相同值(即重复项)的键/值对

问题描述

我目前正在学习 JS,我需要一种方法来返回一个与给定对象相似但删除具有相同值(即重复)的键/值对的对象。

所以如果我有一个给定的对象 { a: 1, b: 2, c: 3, d: 1 }:

它应该返回:

{b:2,c:3}

类似地,如果对象中的所有键值对都有不同的值,则返回的对象将与给定对象简单地相同。

我想我已经接近解决它了,但我不知道我的代码有什么问题。任何帮助将非常感激!

const noDuplicateValues = (obj) => {
  let result = {};
  let keys = Object.keys(obj);
  let duplicate;

  for(let i = 0; i < keys.length; i++) {
    for(let j = i +1; j < keys.length; j++) {
      duplicate = false;
      if(obj[keys[i]] === obj[keys[j]]) {
        duplicate = true;
      }
    }
    if(!duplicate) {
      result[keys[i]] = obj[keys[i]];
    } 
  }
  return result;
}

标签: javascriptobjectkeyvaluepair

解决方案


我会计算每个值的出现次数,然后通过给定条目的值是否只出现一次来过滤对象的条目:

const obj = { a: 1, b: 2, c: 3, d: 1 };
const occurrences = new Map();
for (const val of Object.values(obj)) {
  occurrences.set(val, (occurrences.get(val) || 0) + 1);
}
const newObj = Object.fromEntries(
  Object.entries(obj)
    .filter(([, val]) => occurrences.get(val) === 1)
);
console.log(newObj);


推荐阅读