假设我有一个对象数组
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];
});
});
它会返回一个object
如果存在的话,如果你想返回一个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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句