在javascript过滤器中如何获取元素的索引

时间:2014-04-09 14:11:44

标签: javascript arrays

var ary=[{name:12},{name:5},{name:8},{name:130},{name:44}];
var filtered = ary.filter(function(element,index){return element.name == 44;});

如何获取元素的索引

4 个答案:

答案 0 :(得分:2)

没有内置功能可以做到这一点。您需要手动迭代才能找到它

var result = -1;
for (var i = 0; i < ary.length; i += 1) {
    if (ary[i].name === 44) {
        result = i;
        break;
    }
}

console.log(result);

由于您只有简单的名称值对,我宁愿将其转换为数组,以便进行多次indexOf次查找。

var tempArray = ary.map(function(item) { return item.name; });
tempArray.indexOf(44);
# 4

答案 1 :(得分:1)

好的我想我明白了:你想要找到name的索引。请勿使用.filter(),请使用.reduce()

var position = ary.reduce(function(r, v, i) {
  if (v.name == 44)
    r = i;
  return r;
}, -1);

编辑 - 如果搜索条件可能由多个元素满足,并且您更愿意获取第一个元素,请使用.reduceRight()代替.reduce()最后一个。在这种情况下,一个简单的循环可能会更有效,或者ES6函数.findIndex()(这基本上就是你想要的,但通常不可用)。

答案 2 :(得分:0)

.filter接受一个回调函数,该函数将传递当前值以及索引和实际数组本身。

在您的情况下,index参数具有索引值。

答案 3 :(得分:0)

var array = [{ name: 'Test 1' }, { name: 'Test 2' }];

array.filter(function(item, key){
    console.log('Item value:', item);
    console.log('Key:', key);
});