10

オブジェクトを含む配列があります。特定のオブジェクトのインデックスを見つけたい。このオブジェクトには一意のidプロパティ値があり、次の値で見つけることができます$filter:

 var el = $filter('filter')( tabs, { id: id })[0]; // "el" is my unique element 

しかし、元の配列内のこの要素のインデックスはどうすればわかりますか? $filterこの情報を提供してもらえますか?


このページではあまり有用な情報を得ることができないため、Angular ソリューションは見つかりませんでした。だから私はArrayindexOf方法を使用しました:

 var el_index = tabs.indexOf( el );

http://jsfiddle.net/BhxVV/

特定のすべての要素のインデックスを取得するidには、同様の方法で行います。

 $scope.getTabsIndexes = function(id){
      var els = $filter('filter')( tabs , { id: id });
      var indexes = [];
      if(els.length) { 
          var last_i=0;
          while( els.length ){
             indexes.push( last_i = tabs.indexOf( els.shift() , last_i ) );
          }
      }
      return indexes;        
 }

http://jsfiddle.net/BnBCS/1/

しかし、それは長すぎるので、ここで車輪を再発明していると確信しています...

4

3 に答える 3

5

このオプションを試してください:

 $scope.search = function(selectedItem) {         

    $filter('filter')($scope.tabs, function(item) {

        if(selectedItem == item.id){             
             $scope.indexes.push( $scope.tabs.indexOf(item)  );               
            return true;
        }

        return false;
    });       
 } 

少し短くてわかりやすいと思います。

見るFiddle

于 2013-09-27T14:03:54.687 に答える
2

元のインデックスが必要な理由はわかりませんが、元のインデックスを新しいプロパティとしてオブジェクト自体に追加できます。例: idx を追加するフィルターを作成します。

angular.module('yourModule', [])
.filter('addId', [function() {
    return function(arrObj) {
        for (var i = 0; i < arrObj.length; ++i) {
            arrObj[i].$$originalIdx = i;
        }
        return arrObj;
    };
}]);

次に、この式を html で取得できます。

{{ tabs | addIdx | filter:{id: 777} }}

またはJavaScriptで:

$scope.getTabIndex = function(id){
    var el = $filter('filter')( addId(tabs) , { id: id })[0];
    var el_index = el.$$originalIdx;
    return el_index;        
};

どういうわけか、jsfiddle で動作させることができません。依存関係の注入に問題があるようです。

于 2013-09-27T13:53:40.290 に答える