Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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_Object - Fatal编程技术网

从数组中删除重复对象,不包括JavaScript中的特定键

从数组中删除重复对象,不包括JavaScript中的特定键,javascript,arrays,object,Javascript,Arrays,Object,我有这个阵列: [{name: 'Brad', age: 30, isOlder: true, youngerBrother: 'Oleg'}, {name: 'Brad', age: 30, isOlder: false, youngerBrother: 'Michael'}] 我想检查列表上的项目是否由特定键复制 例如,如果列表中的名称、年龄相同,则行会重复,而不会注意isOlder或youngerBrother 我尝试使用lodash_uniq,但没有排除键/注意特定键的选项请尝试此选项

我有这个阵列:

[{name: 'Brad', age: 30, isOlder: true, youngerBrother: 'Oleg'}, {name: 'Brad', age: 30, isOlder: false, youngerBrother: 'Michael'}]
我想检查列表上的项目是否由特定键复制

例如,如果列表中的名称、年龄相同,则行会重复,而不会注意isOlder或youngerBrother

我尝试使用lodash_uniq,但没有排除键/注意特定键的选项

请尝试此选项

function isDuplicate(ArrayVar) {
    var tempObj = {};
    for (var key in ArrayVar) {
        if (object.hasProperty(ArrayVar[key].name)) {
            return true;
        }
        obj[ArrayVar[key].name] = true;
    }
    return false;
}

您可以使用
Array.prototype.filter

var数据=[
{姓名:'Brad',年龄:30岁,isOlder:对,youngerBrother:'Oleg'},
{姓名:'Brad',年龄:30岁,isOlder:false,youngerBrother:'Michael'}
];
函数distinctByField(arr,field){
var结果=arr.filter(功能(项目){
变量键=项目[字段];
返回此[键]?false:(此[键]=true);
},Object.create(null));
返回结果;
}

日志(distinctByField(数据,'age'))以下是执行此操作的一个选项:

arr = [
    {name: 'Brad', age: 30, isOlder: true, youngerBrother: 'Oleg'}, 
    {name: 'Brad', age: 30, isOlder: false, youngerBrother: 'Michael'}
    ];

var result = checkDuplicateKeys(arr[0], arr[1], ['name', 'age']);
console.log(result);

function checkDuplicateKeys(obj1, obj2, keyList) {
    var propertyDuplicateCounter = 0;
    var result = false;

    for (var i=0; i<keyList.length; i++) {
        if (obj1.hasOwnProperty(keyList[i]) && obj2.hasOwnProperty(keyList[i])) {
            propertyDuplicateCounter += 1;
        }
    }

    if (propertyDuplicateCounter == keyList.length) {
        result = true;
    }

    return result;
}
arr=[
{姓名:'Brad',年龄:30岁,isOlder:对,youngerBrother:'Oleg'},
{姓名:'Brad',年龄:30岁,isOlder:false,youngerBrother:'Michael'}
];
var result=checkDuplicateKeys(arr[0],arr[1],'name','age']);
控制台日志(结果);
功能检查重复键(obj1、obj2、键列表){
var propertyDuplicateCounter=0;
var结果=假;

对于(var i=0;i您可以使用lodash
\uqby(arr,'key')
这将适合您,因为您已经在使用lodash

您可以使用,如果任何两个或更多对象的
名称
-
年龄
相同,它将返回
否则

var ar=[{name:'Brad',年龄:30岁,isOlder:true,youngerBrother:'Oleg'},{name:'Brad',年龄:30岁,isOlder:false,youngerBrother:'Michael'}];
var结果=ar.some(函数(e){
如果(!this[e.name+'|'+e.age]){
这[e.name+'|'+e.age]=true;
}否则{
返回true;
}
}, {});
console.log(结果)
您可以使用
.filter()
.some()

var列表=[
{姓名:'Brad',年龄:30岁,isOlder:对,youngerBrother:'Oleg'},
{姓名:'Brad',年龄:30岁,isOlder:false,youngerBrother:'Michael'}
];
列表=列表.过滤器(功能(外部,oPos){
return!list.some(函数(内部,iPos){
返回iPos>oPos&&inner.name==outer.name&&inner.age==outer.age;
});
});
console.log(list);
尝试+回调从数组项提取复合键:

uniqs = _.uniqBy(yourArray, x => x['name'] + x['age'])
在纯JS中:

uniqBy = (xs, key) => {
    var keys = xs.map(key);
    return xs.filter((x, i) => keys.indexOf(key(x)) === i);
};

uniqs = uniqBy(yourArray, x => x['name'] + x['age'])
有关更多详细信息,请参阅。

请检查: