我有两个对象的数组,我想检查一个数组是否包含我提供的对象?
我已尝试使用array.some
进行此操作,如下图所示:
我知道我可以这样做:
arr.some(item => item.id === 1)
或
const objectToCompare = { id: 1, firstName: "Vishal", lastName: "Seema" };
arr.some(item => item.id === objectToCompare.id);
但我不想这样做或比较每个属性,因为我不想知道属性名称时的通用解决方案。
你能建议一种完整对象比较的方法吗?
答案 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
如果你谷歌的话还有更多。