假设我有一个对象数组
var arr= [{name:'John', lastName:'Smith', age:25}, {name:'Steve', lastName:'Johnson', age:56}];
var obj1 ={name:'John', lastName:'Smith'};
如何使用 JS 检查一个对象是否存在于另一个对象中?
嵌套循环能解决问题吗?第一个循环遍历数组内的对象,第二个循环遍历对象内的键/值对并将它们与 obj1 键/值对进行比较?有一个更好的方法吗 ?或者我应该使用 3 个循环?
该函数应返回包含 obj1 的 arr 中的 obj el。例如:应返回 arr[0],因为它包含 obj1
function objInArr(srcArr, obj) {
var arr = [];
//var srcLength = 0;
//var sourceSize = Object.keys(source).length; // The length of the source obj
srcArr.forEach(function(el) {
el.forEach(function(objEl){
obj.forEach(function(sourceEl){
if( sourceEl === objEl) { arr.push(sourceEl); }
});
});
});
return arr;
}
最佳答案
您可以使用 Arry#find()
的组合 和 Array#some()
遍历数组对象并查找是否存在具有相同键和值的对象的方法:
var exists = arr.find(function(o){
return Object.keys(o).some(function(k){
return !Object.keys(obj1).indexOf(k)>-1 || o[k]!=obj1[k];
});
});
如果它存在,它会返回一个对象
,如果你想返回一个boolean
,你可以用一个改变.find()
.some()
.
这里的语句 !Object.keys(obj1).indexOf(k)>-1 || o[k]!=obj1[k]
如果一个对象没有迭代的 key
或者它的 value
不一样,将退出。
演示:
var arr= [{name:'John', lastName:'Smith', age:25}, {name:'Steve', lastName:'Johnson', age:56}];
var obj1 ={name:'John', lastName:'Smith'};
var exists = arr.find(function(o){
return Object.keys(o).some(function(k){
return !Object.keys(obj1).indexOf(k)>-1 || o[k]!=obj1[k];
});
});
console.log(exists);
关于javascript - 如何使用JS检查一个对象是否存在于另一个对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47382904/