从数组中删除元素会使迭代器无效

Ben*_*Ben 1 angularjs

在AngularJS中,我试图从categories数组中删除每个计数为0的类别.

// remove all categories that have a count of 0
i = 0;
angular.forEach( $scope.categories, function( category )
{           
    if( category.count == 0)
    {
        $scope.categories.splice( i, 1 );
    }
    i++;
});
Run Code Online (Sandbox Code Playgroud)

此代码从数组中删除第一个具有0计数的类别,但不删除下一个类别.我想,splice迭代器无效?我该如何解决这个问题?

rga*_*ill 7

您可以使用javascript 1.6或更高版本的Array对象上提供的过滤器方法.

function countFilter(category, index, array) {
  return (category.count != 0);
}
$scope.categories = $scope.categories.filter(countFilter);
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter

如果您需要支持旧版本的javascript,请检查上面链接的兼容性部分.