var ary=[{name:12},{name:5},{name:8},{name:130},{name:44}];
var filtered = ary.filter(function(element,index){return element.name == 44;});
如何获取元素的索引
答案 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);
});