如何比较两个对象的属性

时间:2016-06-02 23:55:06

标签: javascript object

var arr = [{'a':'daina', 'z':12},{'b':'john', 'y':22}, {'c':'alan','z':30}];
var arr2 = [{'c':'john', 'z':62}, {'d':'alana','s':32},  {'e':'mac','t':42}];
var finalArray = [];
for(var key2 in arr) {
  console.log(arr[key2]);
}
function compareKeys(arr,arr2){
  for(var key1 in arr2){
    for(var key in arr){
      if(key1 === key){
        finalArray = arr.splice(key,1);
      }
    }
  }
  for(var key in finalArray) {
    console.log(finalArray[key]);
  }
}
compareKeys(arr,arr2);

我没有得到代码的错误。我想删除' c'来自' arr'比较两个' arr'和' arr2'。 ' c'两个数组中的属性相同,所以我想在输出中删除它。函数返回的输出应为{'a':'daina', 'z':12},{'b':'john', 'y':22}

有人可以帮助我比较对象的属性吗?

2 个答案:

答案 0 :(得分:0)

你在这里混合数组,对象,键和值。

您应该将变量arrarr2读作

arr[0] = {'a':'daina', 'z':12}
arr[1] = {'b':'john', 'y':22}
arr[2] = {'c':'alan','z':30}]

and

arr2[0] = {'c':'john', 'z':62}
arr2[1] = {'d':'alana','s':32}
arr2[2] = {'e':'mac','t':42}

因此两个数组的分别为0,1和2,而是对象。

在你的嵌套循环中

for(var key1 in arr2){
for(var key in arr){
    if(key1 === key){
      ....
}}}

你基本上都在比较:

key === key1
  0 === 0    (true)
  0 === 1    (false)
  0 === 2    (false)
etc.

而不是价值观。 您应该比较arr[key] === arr2[key1]来比较这些值。可悲的是,你无法像这样比较两个物体。

看看this question。您可以使用其中一个答案来比较对象,或重新考虑您的数据设计。

答案 1 :(得分:0)

而不是比较下面的两个对象

 if(arr2[key1] === arr[key])

你能尝试比较下面的

JSON.stringify(obj1) === JSON.stringify(obj2)