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

时间:2017-11-19 22:55:29

标签: 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。例如:应返回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;
}

2 个答案:

答案 0 :(得分:2)

您可以结合使用 Arry#find() Array#some() 方法来遍历数组对象并查找具有相同键的对象和值是否存在:

FROM microsoft/powershell:ubuntu16.04

RUN apt-get update && apt-get install git -y
RUN git clone https://github.com/DTW-DanWard/PowerShell-Beautifier.git
RUN cp -a PowerShell-Beautifier/src/. /opt/microsoft/powershell/6.0.0-rc/Modules

ENTRYPOINT [ "pwsh", "-c" ]
CMD [ "Get-Help", "Edit-DTWBeautifyScript" ]

如果您要返回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);

答案 1 :(得分:0)

// object contains subObject
function partialContains(object, subObject) {
    // Create arrays of property names
    const objProps = Object.getOwnPropertyNames(object);
    const subProps = Object.getOwnPropertyNames(subObject);

    if (subProps.length > objProps.length) {
        return false;
    }

    for (const subProp of subProps) {
        if (!object.hasOwnProperty(subProp)) {
            return false;
        }

        if (object[subProp] !== subObject[subProp]) {
            return false;
        }
    }

    return true;
}

您现在可以像这样使用它:

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

如果未定义containing,则找不到任何内容,否则返回包含obj1的对象。