javascript - 如何检查数组中是否存在对象

标签 javascript

如何在 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/

相关文章:

Javascript : Anonymous function, 获取全局变量

javascript - 点击jquery中的多个元素?

javascript - ES5 风格的连接数组。将数组合并为一个

javascript - 当列数为 4 时,如何务实地让 ng-repeat 添加另一行?

javascript - 使用 Javascript 正则表达式检测行尾或字符串结尾

javascript - 我想默认设置当前日期和时间并显示在输入字段中

javascript - isPrototypeOf() 在 JavaScript 中处理继承时的用法

javascript - javascript中如何从函数中知道对象?

javascript - TinyMCE-本 map 片上传

javascript - 如何将使用 jquery 添加的元素数组保存到 MySQL DB 中?