如何在 javascript 中检查数组中是否存在对象?
这是一个简单的例子。假设我有一个如下所示的数组:
let array = [{"zone": "WV", "zip": "56855"},
{"zone": "SC", "zip": "28031"},
{"zone": "TN", "zip": "84755"}]
现在我想向我的 array
添加一个对象,但前提是它不存在。
例如尝试添加这个对象会失败:
let addMe = [{"zone": "SC", "zip": "28031"}, {"zone": "TN", "zip": "84755"}]
但这会成功
[{"zone": "SC", "zip": "55555"}, {"zone": "TN", "zip": "88888"}]
显然 addMe
是一个数组,需要逐步执行,在某些对象上失败,在其他对象上成功。
我正在尝试使用 filter
但它无法正常工作。而且我必须单步执行原始数组以及我要添加的对象,创建嵌套的 for 循环,这非常令人困惑。这是我的尝试:
array.filter(function(item){
addMe.forEach(function(element){
if(item.zone != element.zone && zone.zip!= element.zip){
array.push(element);
}
});
});
有没有更好的办法?
最佳答案
另一种方法是使用 some
函数来捕获至少一个不是every
值都相等的对象。
let array = [{"zone": "WV", "zip": "56855"}, {"zone": "SC", "zip": "28031"}, {"zone": "TN", "zip": "84755"}],
addMe = [{"zone": "SC", "zip": "28031"}, {"zone": "TN", "zip": "84755"}];
addMe.forEach(o => {
if (!array.some(a => Object.keys(a).every(k => a[k] === o[k]))) array.push(o);
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 如何检查数组中是否存在对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53549021/