2013-09-27 12 views
9

Mam tablicę z obiektami. Chcę znaleźć indeks konkretnego obiektu. Obiekt ten posiada unikalną właściwość”wartość id i mogę go znaleźć z $filter:Pobierz indeks elementu po użyciu filtru

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

Ale jak mogę wiedzieć, co to jest indeks tego elementu w jego oryginalna tablica? Czy $filter może dostarczyć mi tych informacji?


Do tej pory nie znalazłem kątowym rozwiązanie, bo nie mogę dostać wiele przydatnych informacji na temat this page. Więc użyłem Array „s indexOf metoda:

var el_index = tabs.indexOf(el); 

http://jsfiddle.net/BhxVV/

Aby uzyskać indeksy wszystkich elementów ze szczególnym id idziemy podobny sposób:

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

Ale To jest za długie i jestem pewien, że wymyślam tutaj koło ...

Odpowiedz

5

Spróbuj tej opcji:

$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; 
    });  
} 

Myślę, że to trochę krótkie i jasne.

Zobacz Fiddle

+0

dobro! Zapomniałem o przekazywaniu funkcji jako argumentu do filtra – Cherniv

2

Nie wiem, dlaczego potrzebny jest oryginalny indeks, ale można dodać oryginalny indeks jako nową właściwość do samego obiektu. Np: napisać filtr, aby dodać IDX:

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

Następnie można dostać ten wyraz w html:

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

Albo w javascript:

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

Jakoś nie mogę dostać działa na jsfiddle, wydaje się mieć problem z wtryskiem zależności ..

2

znajdę to prostszy i bardziej czytelny

index = ar.findIndex(e => e.id == 2); 
Powiązane problemy