如何防止添加重复的arraylist对象值?

时间:2018-07-18 15:23:14

标签: javascript arrays ecmascript-6

我有一个问题要阻止将新对象添加到具有与数组中对象的现有元素相同的id值的数组。 我的数组是这样的:

var arr = [
       {id:1, name:'Fabricio'},
       {id:2, name:'Leontina'},
       {id:3, name:'Rodrigo'}];

如果我想添加像{id:2; name:'Evander'}这样的对象,由于ID不能完成。

3 个答案:

答案 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)