Angular JS - Ionic - 从数组中删除

时间:2015-05-22 15:10:48

标签: javascript arrays angularjs ionic

您好,我在尝试从数组中删除时遇到索引问题。

 <i class="icon ion-ios-checkmark-outline" ng-click="addToHistory(task.info, task.measured, task.total, task.done, task.id)"  ></i> 
            {{task.info}}
 $scope.addToHistory = function(title, measured, total, done, id) {
     var index = $scope.tasksCollection.indexOf($scope.tasksCollection[id]);
     $scope.tasksCollection.splice(index, 1);
}

以上作品,但是当我尝试删除第一个项目,然后去第二个项目时,第三个项目被删除而不是第二个项目。我知道是索引的问题,但我对如何解决它没有想法。

总结一下我有:

  • 第1项(索引0)
  • 第2项(索引1)
  • 第3项(索引2)

当我删除第一个我得到的

  • 第2项(索引0)
  • 第3项(索引1)

当我尝试删除Item2时,我得到的索引是1,所以Item3被删除了。

3 个答案:

答案 0 :(得分:2)

我认为问题在于使用task.id进行查找。

尝试传入$ index。

<i class="icon ion-ios-checkmark-outline" ng-click="addToHistory($index, task.info, task.measured, task.total, task.done, task.id)"  ></i> 
            {{task.info}}

JS

$scope.addToHistory = function(index, title, measured, total, done, id) {
     $scope.tasksCollection.splice(index, 1);
}

index的文档

答案 1 :(得分:1)

$scope.tasksCollection[id]

尝试在索引ID处获取任务 - 现在取决于该ID的生成方式,您可以使用以下内容:

$scope.tasksCollection[123] - which won't make sense (if it's an actual entity id)

或者如果您在客户端设置了id属性,那么从集合中删除后,ID就不会匹配。

使用$ index为你想要做的事情,如HockeyJ建议。

答案 2 :(得分:-1)

这是在循环中使用拼接的问题。 Splice重新索引数组并使长度属性过时。通常,解决方案是在删除时向后遍历数组。请参阅此前一个答案以获取更多帮助。

Looping through array and removing items, without breaking for loop