如何遍历对象属性并从该对象属性值的数组中删除重复项?
原始对象
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);
}
运行此块后,数组保持不变。
答案 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'])
}