检查数组是否包含对象

时间:2018-01-13 10:07:53

标签: javascript arrays ecmascript-6

我有两个对象的数组,我想检查一个数组是否包含我提供的对象?

我已尝试使用array.some进行此操作,如下图所示:

enter image description here

我知道我可以这样做:

arr.some(item => item.id === 1)

const objectToCompare = { id: 1, firstName: "Vishal", lastName: "Seema" };
arr.some(item => item.id === objectToCompare.id);

但我不想这样做或比较每个属性,因为我不想知道属性名称时的通用解决方案。

你能建议一种完整对象比较的方法吗?

2 个答案:

答案 0 :(得分:0)

一个简单的解决方案是使用这样的东西:



var arr = [{ id: 1, firstName: "Vishal", lastName: "Seema" }, { id: 2, firstName: "FirstName1", lastName: "LastName1" }, { id: 3, firstName: "FirstName2", lastName: "LastName2" }];
var toFind = { id: 1, firstName: "Vishal", lastName: "Seema" };

var matches = arr.filter(obj => { 
                 return Object.keys(toFind).length == Object.keys(obj).length &&
                        Object.keys(toFind).every(key => obj[key] == toFind[key]);
              });
console.log(matches);




这不做深度检查,只检查第一级。

答案 1 :(得分:0)

所有主要的库和框架都提供了用于对象比较的专用功能。如果不是通过迭代相关对象来执行此操作,请使用其中一个库。

Underscore JS isEqual()

JQuery $.fn.equals()

Angular JS angular.equals

如果你谷歌的话还有更多。