2

問題は、レシピ オブジェクトの配列があることです。各レシピ オブジェクトには、いくつかのコメントがあります。angular が提供する $filter サービスを使用して、angularJS コントローラーで配列をソートしたいと考えています。

 $scope.recipes = $filter('orderBy')($scope.data, function(recipe) {
    return recipe.comments.length;
  });

しかし、必要な結果が得られません。ただし、このような JS 配列の並べ替え機能を使用して、目的の結果を得ることができます

$scope.data.sort(function(a, b) {
     if (a.comments.length < b.comments.length) return 1;
     if (b.comments.length < a.comments.length) return -1;
     return 0;
    });

同じシナリオの Plunkr は次のとおりです: http://plnkr.co/edit/L9Bt67xHRCJLBoWG8EZp?p=preview

前もって感謝します。助けてください!

4

3 に答える 3

2

orderBy を使用すると、はるかに簡単に実行できます

http://plnkr.co/edit/B0fMi7FotgmG2tkCjySt?p=preview

 <ul>
   <li ng-repeat="r in recipes | orderBy:'-comments.length'">
     {{r.title}} - {{r.comments.length}}
   </li>
 </ul>
于 2015-04-26T10:29:36.463 に答える
0

これを別の回答として追加しました。コントローラーで管理したいので、逆にしたいのでtrue、最後の引数として追加します$filter

ドキュメンテーション $filter('orderBy')(array, expression, reverse)

$scope.recipes = $filter('orderBy')($scope.data, function(recipe) {
  return recipe.comments.length;
}, true);

必要に応じて、逆をスコープ内の var に設定することもできます。

于 2015-04-26T10:55:28.373 に答える
0
$scope.recipes = $filter('orderBy')($scope.data, "comments.length", true)

フィルターは、関数ではなくを想定しています。

于 2015-04-26T11:06:16.910 に答える