Javascript 如何使用JS检查一个对象是否存在于另一个对象中

Javascript 如何使用JS检查一个对象是否存在于另一个对象中,javascript,Javascript,假设我有一个对象数组 var arr= [{name:'John', lastName:'Smith', age:25}, {name:'Steve', lastName:'Johnson', age:56}]; var obj1 ={name:'John', lastName:'Smith'}; 如何使用JS检查一个对象是否存在于另一个对象中 嵌套循环会起作用吗?第一个循环遍历数组中的对象,第二个循环遍历对象中的键/值对,并将它们与obj1键/值对进行比较?有更好的方法吗?或者我应该使用3个

假设我有一个对象数组

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;
}

您可以结合使用方法在数组对象上循环,并查找是否存在具有相同键和值的对象:

var exists = arr.find(function(o){
    return Object.keys(o).some(function(k){
          return !Object.keys(obj1).indexOf(k)>-1 || o[k]!=obj1[k];
    });
});
它将返回一个
对象
,如果它存在,如果您想返回一个
布尔值
,您可以使用
.some()
更改
.find()

下面是语句
!Object.keys(obj1).indexOf(k)>-1 | | o[k]=如果对象没有迭代的
或其
值不相同,obj1[k]
将退出

演示:

var arr=[{姓名:'John',姓氏:'Smith',年龄:25},{姓名:'Steve',姓氏:'Johnson',年龄:56}];
var obj1={name:'John',lastName:'Smith'};
var exists=arr.find(函数(o){
返回Object.keys(o).some(函数(k){
return!Object.keys(obj1).indexOf(k)>-1 | | o[k]!=obj1[k];
});
});
console.log(存在)
您现在可以这样使用它:

const arr= [{name:'John', lastName:'Smith', age:25}, {name:'Steve', lastName:'Johnson', age:56}];

const obj1 ={name:'John', lastName:'Smith'};

const containing = arr.find((object) => partialContains(object, obj1));
如果包含的
未定义,则未找到任何内容,否则,将返回包含
obj1
的对象

const arr= [{name:'John', lastName:'Smith', age:25}, {name:'Steve', lastName:'Johnson', age:56}];

const obj1 ={name:'John', lastName:'Smith'};

const containing = arr.find((object) => partialContains(object, obj1));