如何从数组对象属性值中删除重复项?

时间:2019-08-04 15:54:19

标签: javascript arrays filter duplicates

如何遍历对象属性并从该对象属性值的数组中删除重复项?

原始对象

var navObjects = {
    'Components': ['x', 'y', 'x'],
    'Document': ['z', 'z', 'z', 'q'],
    'Utilities': ['a', 'b', 'c']
}

所需对象

navObjects: {
    'Components': ['x', 'y'],
    'Document': ['z','q'],
    'Utilities': ['a', 'b', 'c']
}

我尝试过的

for (let i = 0; i < Object.values(navObjects).length; i++) {

    let obj = Object.values(navObjects)[i];

    Object.values(obj).filter((item, index) => obj.indexOf(item) === index);
    console.log(obj);

}

运行此块后,数组保持不变。

3 个答案:

答案 0 :(得分:4)

您可以使用Set构造函数和spread syntax

const navObjects = {
  'Components': ['x', 'y', 'x'],
  'Document': ['z', 'z', 'z', 'q'],
  'Utilities': ['a', 'b', 'c']
};

for (const key in navObjects) {
  navObjects[key] = [...new Set(navObjects[key])];
}

console.log(navObjects);

答案 1 :(得分:0)

此代码将帮助您实现目标。

var newNavObjects = {}
var existObjects = {}
for(let key in navObjects) {
    let objects = navObjects[key];
    newNavObjects[key] = [];
    existObjects[key] = {};
    for(let object of objects) {
        if (!existObjects[key][object]) {
            existObjects[key][object] = 1;
            newNavObjects[key].push(object);
        }
    }
}
delete existObjects;
console.log(newNavObjects);

我创建了新的变量以提高效率。如果我们使用indexOf检查数组中是否存在不存在的值。在这种情况下,它将比我们检查目标变量键重。仍然这不是最好的解决方案,但是可以肯定。 :)

答案 2 :(得分:0)

您可以创建一个Set来删除重复项并获取values()以便将其转换回数组,例如:

(new Set(['z', 'z', 'z', 'q'])).values()

让我们做一个function

function removeDuplicates(input) {
    return (new Set(input)).values();
}

然后使用它:

var navObjects = {
    'Components': removeDuplicates(['x', 'y', 'x']),
    'Document': removeDuplicates(['z', 'z', 'z', 'q']),
    'Utilities': removeDuplicates(['a', 'b', 'c'])
}