检查其他对象中是否存在对象'数组中的子对象

时间:2017-03-31 09:35:54

标签: javascript arrays typescript lodash

我有这种数组:

array = [
     {
      a:0, 
      b:{x:1,y:2} 
     },
     {
      c:0,
      b:{x:3,y:2}},
    ]

我有一个像这样的新对象

{
 e:0, 
 b:{x:2,y:5}
}

我想测试array中的对象是否具有相同 嵌套 b object,如果是,我会推送那里的新对象,如果它已经存在,我将用更新的对象替换整个对象。 任何帮助我怎么能实现这一点(Lodash,ES6 ..), 我使用的是Typescript btw。

2 个答案:

答案 0 :(得分:1)

您只需对数组使用Array.prototype.some()方法来测试搜索对象中是否存在任何匹配的b对象,您的代码将为:

function checkIfObjectExists(array, obj) {
  return array.some(function(element) {
    return (typeof obj.b === typeof element.b) && JSON.stringify(obj.b) === JSON.stringify(element.b);
  });
}

这是一个有效的片段:

function checkIfObjectExists(array, obj) {
  return array.some(function(element) {
    return (typeof obj.b === typeof element.b) && JSON.stringify(obj.b) === JSON.stringify(element.b);
  });
}

array = [{
    a: 0,
    b: {
      x: 1,
      y: 2
    }
  },
  {
    c: 0,
    b: {
      x: 3,
      y: 2
    }
  },
];

var searched = {
  e: 0,
  b: {
    x: 2,
    y: 5
  }
};


//Check an existing userId
console.log(checkIfObjectExists(array, searched));

//Check a non existing userId
console.log(checkIfObjectExists(array, {
  a: 0,
  b: {
    x: 1,
    y: 2
  }
}));

答案 1 :(得分:1)

如果同一个对象已存在,则以下IsExists()返回true,如果同一个对象不存在则返回false。

function IsExists(YourList,Object ) {
        var i;
        for (i = 0; i < YourList.length; i++) {
            if (YourList[i].c === Object .c && YourList[i].b === Object .b) {
                return true;
            }
        }

        return false;
    }

称你的功能如下:

    var NewObject={
     e:0, 
     b:{x:2,y:5}
    }

if (!IsExists(array ,NewObject.b))
{
array .push(NewObject);
}

如果IsExists(array,NewObject.b)返回false,则将此对象推送到数组