1

AngularJSで、カウントが0のすべてのカテゴリをcategories配列から削除しようとしています。

// 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

javascriptバージョン1.6以降のArrayオブジェクトで使用可能なfilterメソッドを使用できます。

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;

また、参考までに、イテレータ関数にはインデックスである2番目のパラメータがあるため、必要になった場合に備えて、のi外側を宣言する必要はありませんforEach。あなたはただすることができます:

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