我的数据数组
data : [
{
"name": "Autauga, AL",
"value": 5.6
},
{
"name": "Baldwin, AL",
"value": 5.3
},...
]
如果我只有名称“Autauga,AL”,如何检索数组对象的索引? 我知道蛮力循环。有更好的方法吗?
答案 0 :(得分:2)
在ECMAScript 5.1+中,您可以使用Array#filter
方法获取实际对象:
data.filter(function(item){return item.name == 'Autauga, AL'})[0]
但这并没有让你获得索引。你可以这样做:
data.map(function(item,index){
return [item, index]
}).filter(function(a){
return a[0].name == 'Autauga, AL'
})[0][1]
这些方法仍然在封面下使用循环,但我猜它们看起来更酷......
为了有效访问,您可以为目标字段构建索引:
var dataIndexByName = {}, i, len;
for (i=0, len=data.length; i<len; ++i) {
dataIndexByName[data[i].name] = i
}
之后您可以查找dataIndexByName['Autauga, AL']
。这也具有在旧实现中工作的优点。但是,如果给定的名称可能在原始数组中出现多次,则会变得更复杂。
答案 1 :(得分:0)
你可以这样做:
for (var i = 0, len = data.length; i++) {
if (data[i].name.indexOf("Autauga, AL") > -1) {
return i;
}
}
答案 2 :(得分:0)
您可以根据Array.prototype.some编写一个小功能来完成工作:
function getIndex(arr, prop, value) {
var idx;
arr.some(function(v, i) {
if (v[prop] == value) {
idx = i;
return true;
}
});
return idx;
}
data = [{"name": "Autauga, AL","value": 5.6},
{"name": "Baldwin, AL","value": 5.3}];
console.log(getIndex(data, 'name', 'Baldwin, AL')); // 1
某些是有效的,因为它在回调首次返回true时停止。您可能希望调整条件以适应。