我想在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
})
}
})
答案 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");