如果数组已经没有该对象,我试图将一个对象添加到数组中。
所以我有一个数组如下
[{id:1},{id:2},{id:3}]
我想检查id:1
是否存在,如果不存在则添加,如果是,则显示错误或记录消息。
我可以使用如下的简单数组来实现这一点。
let result =[1,2,2,3,1,4,1,4,2,3].filter((el, i, a) => i === a.indexOf(el));
我无法弄清楚如何用对象数组实现相同的效果。
由于
答案 0 :(得分:2)
您可以使用Array#filter,并检查长度:
const arr = [{id:1},{id:2},{id:3}];
const el = { id: 1 };
const exists = arr.filter(({ id }) => id === el.id).length > 0;
console.log(exists);
或者您可以使用Array#find,它比Array#filter略有优势,因为它会在找到项目后立即停止。
const arr = [{id:1},{id:2},{id:3}];
const el = { id: 1 };
const exists = !!arr.find(({ id }) => id === el.id);
console.log(exists);
您可以使用具有proxy陷阱的set
包装数组,以防止自动插入重复项:
const arr = [{id:1},{id:2},{id:3}];
const arrayChangeHandler = {
set: function(target, property, value, receiver) {
if(property === 'length') {
return true;
}
const exists = !!target.find(({ id }) => id === value.id);
if(exists) {
console.log(`Id: ${value.id} exists!`); // you can return false here, and it will throw an error
} else {
target.push(value);
}
return true;
}
};
const pArr = new Proxy(arr, arrayChangeHandler);
pArr.push({ id: 1 });
pArr.push({ id: 10 });
console.log(JSON.stringify(arr));
答案 1 :(得分:2)
您可以使用some
检查重复内容,例如:
// array with duplicate objects {id:1}
let arr = [{id:1},{id:1},{id:2}]
function duplicateFound(arr){
const ids = arr.map(x => x.id);
return ids.some((item, idx) => ids.indexOf(item) != idx);
}
console.log(duplicateFound(arr));
// array with not duplicates
arr = [{id:1},{id:2},{id:3}]
console.log(duplicateFound(arr));