我得到了一个像这样结构的对象数组
$_GET['width']
通过我的自定义操作,我将向数组添加新信息。但是在将新的obejct添加到数组之前,我想检查是否存在类似的(所有键的值相同)。如果是 - 什么都不做,如果没有类似的对象 - 添加到数组。
简单的for循环复制对象,因为它运行在数组的所有元素上。
myArr = [
{name: Test1, age: 20, info: Test2},
{name: Test2, age: 20, info: Test3},
{name: Test5, age: 28, info: Test30}
]
答案 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)
}