使用过滤器后获取元素的索引

时间:2013-09-27 12:26:38

标签: javascript angularjs angularjs-filter

我有一个包含对象的数组。我想找到一个特定对象的索引。此对象具有唯一的id属性'值,我可以使用$filter找到它:

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

但我怎么知道它的原始数组中这个元素的索引是什么? $filter可以向我提供此信息吗?


到目前为止,我没有找到Angular解决方案,因为我无法在this page上获得更多有用的信息。所以我使用了Array的{​​{1}}方法:

indexOf

http://jsfiddle.net/BhxVV/

要获取具有特定 var el_index = tabs.indexOf( el ); 的所有元素的索引,我们采用类似的方式:

id

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

但它太长了,我确信我在这里重新发明轮子......

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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上运行,它似乎在依赖注入方面遇到了麻烦..

答案 2 :(得分:2)

我发现这更简单,更易读

index = ar.findIndex(e => e.id == 2);