AngularJS比较两个(作用域)数组,仅发布``非相同''结果(2018)

时间:2018-07-31 16:38:12

标签: javascript arrays angularjs

我想在ID上比较两个数组,如果一个数组中的ID在另一个数组中不存在,我会在Http Post中添加它。

这是构建物:

$scope.Games = [{id:1,Name:"BatMan"},
                {id:2,Name:"SpiderMan"},
                {id:2,Name:"Hulk"}];

$scope.NewGames = [{id:1,Name:"BatMan"},
                   {id:2,Name:"SpiderMan"},
                   {id:3,Name:"Hulk"},
                   {id:4,Name:"DeadPool"},
                   {id:5,Name:"IronMan"}, ,
                   {id:6,Name:"DrStrange"}];

所以我在两个$ scope中使用GET加载了所有Games和NewGames 现在,我想比较id_game上的两者,因此我想到了类似的方法,但无法使其正常工作,http部分可以找到,但是如果没有indexOf,如果它们都将DB中的所有游戏加倍已经存在,这就是我要防止的事情。

angular.forEach($scope.NewGames, function (value, index) {

  if ($scope.Games.indexOf(value.id ) === -1) {

      console.log('New game to add' + value.Name)         

     $http({
       method: 'POST',
       url: 'http.....\addGame',
       data: value
     })
  }
})

1 个答案:

答案 0 :(得分:2)

由于$scope.Games是对象数组,因此使用findIndex()而不是indexOf()

findIndex()方法对数组中存在的每个元素执行一次功能:

如果找到函数返回真值的数组元素,则findIndex()返回该数组元素的索引(并且不检查其余值)。如果找不到这样的元素,则返回-1。在以下示例中:

o是数组games的每个对象/元素,我们检查id数组的每个对象的games(o.id)属性是否与数组中的相等。 findId。如果游戏数组中有一个元素,其id与findId匹配,则条件变为true,并且findIndex返回该元素/对象的索引。

var games = [{id:1,value:"abc"},{id:2,value:"dfg"},{id:2,value:"fdf"}];
var findId = 2;
// when object with id is present in array
if(games.findIndex((o)=>o.id == findId) > -1);
  console.log("Found");
findId= 6;
//when object with id is not present in array
if(games.findIndex((o)=>o.id == findId) == -1);
  console.log("Not found");