Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从数组对象属性值中删除重复项?_Javascript_Arrays_Filter_Duplicates - Fatal编程技术网

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

Javascript 如何从数组对象属性值中删除重复项?,javascript,arrays,filter,duplicates,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'

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

原物

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);

}

运行此块后,阵列保持不变。

此代码将帮助您实现目标

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检查数组中的值是否存在。它将比我们检查目标变量键更重,在这种情况下,existObjects。这仍然不是最好的解决方案,但这肯定可以

此代码将帮助您实现目标

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检查数组中的值是否存在。它将比我们检查目标变量键更重,在这种情况下,existObjects。这仍然不是最好的解决方案,但这肯定可以

您可以创建一个集合来删除重复项并获取值,以便将其转换回数组,如:

(new Set(['z', 'z', 'z', 'q'])).values()
让我们把它当作一个函数:

然后使用它:

var navObjects = {
    'Components': removeDuplicates(['x', 'y', 'x']),
    'Document': removeDuplicates(['z', 'z', 'z', 'q']),
    'Utilities': removeDuplicates(['a', 'b', 'c'])
}
您可以创建一个集来删除重复项并获取值,以便将其转换回数组,如:

(new Set(['z', 'z', 'z', 'q'])).values()
让我们把它当作一个函数:

然后使用它:

var navObjects = {
    'Components': removeDuplicates(['x', 'y', 'x']),
    'Document': removeDuplicates(['z', 'z', 'z', 'q']),
    'Utilities': removeDuplicates(['a', 'b', 'c'])
}
您可以使用构造函数和:

常量navObjects={ 'Components':['x','y','x'], '文档':['z','z','z','q'], “实用工具”:[a”,“b”,“c'] }; 用于导航对象中的常量键{ navObjects[key]=[…新设置navObjects[key]]; } console.lognavObjects 您可以使用构造函数和:

常量navObjects={ 'Components':['x','y','x'], '文档':['z','z','z','q'], “实用工具”:[a”,“b”,“c'] }; 用于导航对象中的常量键{ navObjects[key]=[…新设置navObjects[key]]; }
console.lognavObjects;美好的这是成功的。只有当我们假设对象只有数组成员,并且我们打算删除所有成员的重复项时,这才有效。很好。这是成功的。只有当我们假设对象只有数组成员,并且我们打算删除所有成员的重复项时,这才有效。我想知道这个答案被否决的原因。我测试了它,它成功了。如果有人能解释原因,我将不胜感激。我想知道这个答案被否决的原因。我测试了它,它成功了。如果有人能解释原因,我将不胜感激。