从数组中删除重复对象,不包括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'])
有关更多详细信息,请参阅。请检查: