Javascript AngularJS比较两个(范围)数组,只发布';不相同';结果(2018年)
我有两个数组,我喜欢在ID上进行比较,如果一个数组中的ID在另一个数组中不存在,我会将其与Http Post一起添加 这是建立: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
$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所示