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

javascript数组查找类似对象-如果不存在,则添加到数组,javascript,arrays,loops,Javascript,Arrays,Loops,我得到了一个结构如下的对象数组 myArr = [ {name: Test1, age: 20, info: Test2}, {name: Test2, age: 20, info: Test3}, {name: Test5, age: 28, info: Test30} ] 通过我的自定义操作,我将向数组添加新信息。但在将新的obejct添加到数组中之前,我想检查相似的一个是否存在所有键的相同值。如果是-不执行任何操作,如果没有类似

我得到了一个结构如下的对象数组

myArr = [
         {name: Test1, age: 20,  info: Test2}, 
         {name: Test2, age: 20, info: Test3},
         {name: Test5, age: 28, info: Test30}
 ]
通过我的自定义操作,我将向数组添加新信息。但在将新的obejct添加到数组中之前,我想检查相似的一个是否存在所有键的相同值。如果是-不执行任何操作,如果没有类似对象-添加到数组

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

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) {

    }
    else {
        myArr.push(added);
    }
}

问题是您正在循环中添加。相反,如果没有找到匹配项,则只希望在循环之后添加

因此,只要稍作改动:

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);
}
如果使用ES2015箭头功能,则会更加清晰:

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

问题是您正在循环中添加。相反,如果没有找到匹配项,则只希望在循环之后添加

因此,只要稍作改动:

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);
}
如果使用ES2015箭头功能,则会更加清晰:

if (!myArr.find(e => e.name === added.name && e.age === added.age && e.info === added.info)) {
    myArr.push(added);
}
看看这个。 您可以使用。查找以匹配您的条件,并检查它是否已存在

myArr=[ {姓名:'Test1',年龄:20,信息:'Test2'}, {姓名:'Test2',年龄:20岁,信息:'Test3'}, {姓名:'Test5',年龄:28岁,信息:'Test30'} ] 让我们添加={name:'Test6',age:22,info:'Test40'}; 让matching=myArr.finda=>a.name===added.name&&a.age===added.age&&a.info===added.info; 如果匹配{ 迈尔·普希德 控制台。日志“已添加”; console.logmyArr } 看看这个。 您可以使用。查找以匹配您的条件,并检查它是否已存在

myArr=[ {姓名:'Test1',年龄:20,信息:'Test2'}, {姓名:'Test2',年龄:20岁,信息:'Test3'}, {姓名:'Test5',年龄:28岁,信息:'Test30'} ] 让我们添加={name:'Test6',age:22,info:'Test40'}; 让matching=myArr.finda=>a.name===added.name&&a.age===added.age&&a.info===added.info; 如果匹配{ 迈尔·普希德 控制台。日志“已添加”; console.logmyArr
}您可以使用像LoDash这样的外部库吗?它具有搜索数组中匹配对象的函数。@kshetline:三年前的JavaScript标准库也是如此。@TJ-将数组中的每个对象与另一个对象逐个成员匹配的方法,而不是进行简单的===比较?@kshetline:没有那么明确,没有,但也不远。例如:var keys=Object.keysadded;如果myArr.somee=>keys.everyk=>添加了[k]==e[k]{/*…*/}插入Object.keyse.length===keys.length,如果您想通过大约18种其他方式进行检查或调整。您可以使用像LoDash这样的外部库吗?它具有搜索数组中匹配对象的函数。@kshetline:三年前的JavaScript标准库也是如此。@TJ-将数组中的每个对象与另一个对象逐个成员匹配的方法,而不是进行简单的===比较?@kshetline:没有那么明确,没有,但也不远。例如:var keys=Object.keysadded;如果myArr.somee=>keys.everyk=>添加了[k]==e[k]{/*…*/}插入Object.keyse.length==keys.length,如果您希望以大约18种其他方式进行检查或调整。