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

标签 javascript

假设我有一个对象数组

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/

相关文章:

javascript - 观察简单数组的元素

javascript - 播放网络音频时 Chrome Css 动画中断

javascript - 这个 Angular 2 服务实现有什么问题?

javascript - 如何使用 jQuery 找到最大的表格单元格高度?

javascript - 在 UI-Grid cellTemplate 中使用 {{COL_FIELD}}

javascript - typescript 错误 : Property 'status' does not exist on type 'never' . ts(2339)

javascript - 如何阻止用户重复单击 jQuery AJAX 调用?

绘制对象时 JavaScript for 循环问题

javascript - 如何在 JavaScript 中使用特定变量来定位对象

javascript - 为什么仅在单元测试 $location 时必须包含 $route ?