3

私のAngularアプリケーションのコントローラーの1つに、次のように変数が設定されています。

SomeService.get({}, function(data){
    // this sets xyz as the list of the data retrieved 
    // from the resource within the controllers scope
    $scope.xyz = data.objects;    
});

$scope.xyzのように見えます

[
    0: {id: 1, ...more data here ...},
    1: {id: 2, ...more data here ...},
    2: {id: 3, ...more data here ...},
    3: {id: 4, ...more data here ...},
    4: {id: 5, ...more data here ...},
    5: {id: 6, ...more data here ...},
]

私がやろうとしているのは、id(リスト インデックスではなく) プロパティを使用して xyz 内のオブジェクトを取得することです。次のように配列を反復処理できることを認識しています。

angular.forEach($scope.xyz, function(obj){ return obj.id == 1;});

しかし、リストをループせずにそれを行う方法はありますか?

4

2 に答える 2

8

これは 1 年前に既に回答されていますが、これは Google の上位の結果の 1 つであるため、フィルタリングする最も簡単な方法である可能性がある次の提案を追加できると思いました。コントローラーに $filter を注入した後、

var result = $filter('filter')($scope.xyz, {id:"1"});

参照: https://docs.angularjs.org/api/ng/filter/filter

于 2014-10-15T20:57:48.093 に答える
5

O(n)いいえ、いくつかの前提条件が満たされない限り、ループ ( ) を実際に回避することはできません。

  • 配列が ID でソートされている場合は、二分探索アルゴリズム ( O(log n)) を使用できます。
  • 配列インデックスが常に id-1 (または同様の単​​純な式) に対応する場合は、 で直接アクセスできますO(1)

これらの条件が最初は満たされていないが、id で複数回アイテムにアクセスする必要がある場合は、それらをその形式 (ソート/ハッシュ マップの構築) にすると役立つ場合があります。

于 2013-03-14T14:10:36.600 に答える