javascript数组寻找类似对象 - 如果不存在则添加到数组

时间:2018-03-09 12:14:18

标签: javascript arrays loops

我得到了一个像这样结构的对象数组

$_GET['width']

通过我的自定义操作,我将向数组添加新信息。但是在将新的obejct添加到数组之前,我想检查是否存在类似的(所有键的值相同)。如果是 - 什么都不做,如果没有类似的对象 - 添加到数组。

简单的for循环复制对象,因为它运行在数组的所有元素上。

myArr = [
         {name: Test1, age: 20,  info: Test2}, 
         {name: Test2, age: 20, info: Test3},
         {name: Test5, age: 28, info: Test30}
 ]

2 个答案:

答案 0 :(得分:4)

问题是你在循环中添加。相反,如果找不到匹配项,则只想在循环后添加

所以改变很小:

var i;
for(i = 0; i < myArr.length; i++) {
    if((myArr[i].name === added.name) && (myArr[i].age === added.age) && (myArr[i].info === added.info) {
        // Found, stop here
        break;
    }
}
if (i === myArr.length) {
    // Not found, add
    myArr.push(added);
}

但您也可以使用Array#find(在ES2015中添加,您可以将其填充到过时的环境中)或Array#some(也在ES2015中添加):

if (!myArr.find(function(e) { return e.name === added.name && e.age === added.age && e.info === added.info; })) {
    myArr.push(added);
}

如果使用ES2015箭头功能,则更清晰一点:

if (!myArr.find(e => e.name === added.name && e.age === added.age && e.info === added.info)) {
    myArr.push(added);
}

答案 1 :(得分:0)

检查一下。 您可以使用.find()来匹配您的条件并检查它是否已经存在。

myArr = [
         {name: 'Test1', age: 20,  info: 'Test2'}, 
         {name: 'Test2', age: 20, info: 'Test3'},
         {name: 'Test5', age: 28, info: 'Test30'}
 ]
 
let added = {name: 'Test6', age: 22, info: 'Test40'};
 
let matching = myArr.find(a => a.name === added.name && a.age === added.age && a.info === added.info);

if(!matching) {
  myArr.push(added)
  console.log('added');
  console.log(myArr)
}