您好,我在尝试从数组中删除时遇到索引问题。
<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);
}
以上作品,但是当我尝试删除第一个项目,然后去第二个项目时,第三个项目被删除而不是第二个项目。我知道是索引的问题,但我对如何解决它没有想法。
总结一下我有:
当我删除第一个我得到的
当我尝试删除Item2时,我得到的索引是1,所以Item3被删除了。
答案 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