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种其他方式进行检查或调整。