开发者问题收集

比较两个数组中的对象

2020-03-06
72

我想比较两个数组中的对象,如果它们不相同,则将它们添加到数组中。
第一个数组

[
  {
    "email": "[email protected]"
  },
  {
    "email": "[email protected]"
  },
  {
    "email": "[email protected]"
  },
  {
    "email": "[email protected]"
  }
]

第二个数组

[
  {
    "email": "[email protected]"
  },
  {
    "email": "[email protected]"
  },
  {
    "email": "[email protected]"
  }
]

检查函数

if($scope.participants.length > 0){
    result.forEach(function (resultElement) {   
        if(!$scope.participants.includes(resultElement) ) {
            $scope.participants.push(resultElement);
        }
    })
    result = [];
    console.log($scope.participants);
}

我检查了调试,它在 if 条件下失败了。

2个回答

您需要了解两个对象并不相等且相同。

例如 {} === {} 返回 false

如果要比较对象,则需要比较每个对象的每个原始元素。

原始元素包括数字、字符串、布尔值等,而不是对象或数组(它们也是对象)。

mosmk
2020-03-06
b1 = [
    { id: 0, email: 'john@' }, 
    { id: 1, email: 'mary@' }, 
    { id: 2, email: 'pablo@' }, 
    { id: 3, email: 'escobar@' } 
  ]; 
  
 b2 = [
    { id: 0, email: 'john@' }, 
    { id: 1, email: 'mary@' }
  ];

   var res = this.b1.filter(item1 => 
  !this.b2.some(item2 => (item2.id === item1.id && item2.name === item1.name)))
  
  console.log("check more is working",res);
Pushprajsinh Chudasama
2020-03-06