Javascript 获取元素';使用过滤器后的s索引
我有一个包含对象的数组。我想找到一个特定对象的索引。此对象具有唯一的Javascript 获取元素';使用过滤器后的s索引,javascript,angularjs,angularjs-filter,Javascript,Angularjs,Angularjs Filter,我有一个包含对象的数组。我想找到一个特定对象的索引。此对象具有唯一的idproperty'值,我可以通过$filter找到它: var el = $filter('filter')( tabs, { id: id })[0]; // "el" is my unique element 但是我怎么知道这个元素在它的原始数组中的索引是什么呢?$filter是否可以向我提供此信息 到现在为止,我还没有找到一个角度解,因为我不能得到很多有用的信息。所以我使用了Array的indexOf方法:
id
property'值,我可以通过$filter
找到它:
var el = $filter('filter')( tabs, { id: id })[0]; // "el" is my unique element
但是我怎么知道这个元素在它的原始数组中的索引是什么呢?$filter
是否可以向我提供此信息
到现在为止,我还没有找到一个角度解,因为我不能得到很多有用的信息。所以我使用了
Array
的indexOf
方法:
var el_index = tabs.indexOf( el );
要获得具有特定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;
}
但是它太长了,我确信我在这里重新发明轮子…不确定为什么需要原始索引,但是您可以将原始索引作为新属性添加到对象本身。例如:编写筛选器以添加idx:
angular.module('yourModule', [])
.filter('addId', [function() {
return function(arrObj) {
for (var i = 0; i < arrObj.length; ++i) {
arrObj[i].$$originalIdx = i;
}
return arrObj;
};
}]);
或在javascript中:
$scope.getTabIndex = function(id){
var el = $filter('filter')( addId(tabs) , { id: id })[0];
var el_index = el.$$originalIdx;
return el_index;
};
不知何故,我无法在JSFIDLE上使用它,它似乎在依赖项注入方面遇到了问题。尝试以下选项:
$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;
});
}
我觉得它有点简短和清晰
参见我觉得这更简单,也更易读
index = ar.findIndex(e => e.id == 2);
好!!我忘记了将函数作为参数传递给过滤器
index = ar.findIndex(e => e.id == 2);