javascript:从字典键中获取对象的索引

时间:2014-06-06 00:24:14

标签: javascript map

我的数据数组

data : [
  {
    "name": "Autauga, AL",
    "value": 5.6
  },
  {
    "name": "Baldwin, AL",
    "value": 5.3
  },...
]

如果我只有名称“Autauga,AL”,如何检索数组对象的索引? 我知道蛮力循环。有更好的方法吗?

3 个答案:

答案 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时停止。您可能希望调整条件以适应。