我有一个问题要阻止将新对象添加到具有与数组中对象的现有元素相同的id值的数组。 我的数组是这样的:
var arr = [
{id:1, name:'Fabricio'},
{id:2, name:'Leontina'},
{id:3, name:'Rodrigo'}];
如果我想添加像{id:2; name:'Evander'}
这样的对象,由于ID不能完成。
答案 0 :(得分:2)
您可以通过以下方式检查ID是否在数组中:
if(!arr.some(el => el.id === 2))
arr.push({ id: 2, name: "Evander" });
但这实际上是Map的一个好用例:
const users = new Map([
[1, { name: "one" }],
[2, { name: "two" }]
]);
因此,您可以轻松地检查一个ID是否在固定时间内存在:
if(!users.has(2))
users.set(2, { name: "newtwo" });
答案 1 :(得分:2)
您可以使用Array#find:
const arr = [
{id:1, name:'Fabricio'},
{id:2, name:'Leontina'},
{id:3, name:'Rodrigo'}
];
function push(array, item) {
if (!array.find(({id}) => id === item.id)) {
array.push(item);
}
}
push(arr, {id: 2, name: 'Evander'}); // won't be added
push(arr, {id: 10, name: 'Kyle'}); // will be added
答案 2 :(得分:0)
您可以通过以下方式使用array.filter
函数:
let array = [
{ id: 1, name: 'Fabricio' },
{ id: 2, name: 'Leontina' },
{ id: 3, name: 'Rodrigo' }
]
function add (object) {
if (object) {
if (array.filter(x => x.id === object.id).length === 0) {
array.push(object)
}
}
}
add({ id: 2, name: 'Evander' }) // won't add
add({ id: 4, name: 'Evander' }) // will add
console.log(array)