Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS比较两个(范围)数组,只发布';不相同';结果(2018年)_Javascript_Arrays_Angularjs - Fatal编程技术网

Javascript AngularJS比较两个(范围)数组,只发布';不相同';结果(2018年)

Javascript AngularJS比较两个(范围)数组,只发布';不相同';结果(2018年),javascript,arrays,angularjs,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,Na

我有两个数组,我喜欢在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 现在我想在id_游戏上比较这两个,所以我想做一些类似的事情,但无法让它工作,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
     })
  }
})

因为
$scope.Games
是一个对象数组,所以使用
findIndex()
而不是
indexOf()

findIndex()
方法对数组中的每个元素执行一次函数:

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

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

var-games=[{id:1,值:“abc”},{id:2,值:“dfg”},{id:2,值:“fdf”}];
var-findId=2;
//当数组中存在id为的对象时
if(games.findIndex((o)=>o.id==findId)>-1);
控制台日志(“找到”);
findId=6;
//当数组中不存在id为的对象时
if(games.findIndex((o)=>o.id==findId)=-1);

控制台日志(“未找到”)我有点明白您要去哪里,但我如何将其用于if()?因为有两个数组,所以本例中的0.id==6也来自一个数组,value@EwaldBos我已经更新了我的答案,请看一看:-)@EwaldBos在您的情况下,它将简单地等于:if($scope.Games.findIndex((o)=>o.id\u game==value.id\u game)=-1)很好!工作完美。只是一个问题,你能解释一下这部分是怎么工作的吗。。。(o) =>o.id\U游戏。。。也许把它添加到答案中,然后我可以选择正确的答案:)这个问题的可能重复是一样的,但在这种情况下,方法是不同的,首先,我们在编程领域已经有9年了,所以应该有更有效的方法。如@amrender singh所示