1

在 AngularJS 中,我试图从类别数组中删除每个计数为 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++;
});

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

4

2 回答 2

7

您可以在 1.6 或更高版本的 Array 对象上使用可用的过滤器方法。

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

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

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

于 2013-03-26T03:54:27.970 回答
2

我只会创建一个具有非零计数的新数组。像这样的东西:

// remove all categories that have a count of 0
var nonZeroCategories = [];
angular.forEach( $scope.categories, function( category )
{           
    if( category.count > 0)
    {
        nonZeroCategories.push(category)
    }
});
$scope.categories = nonZeroCategories;

另外,作为一个仅供参考,迭代器函数有第二个参数,即索引,所以如果你需要它,你不需要iforEach. 你可以这样做:

angular.forEach( $scope.categories, function( category, i ) {
    .....
于 2013-03-25T16:30:05.040 回答