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

标签 javascript dictionary

我的数据数组

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

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

最佳答案

在 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']。这也具有在较旧的实现中工作的优点。不过,如果给定的名称可能在原始数组中出现多次,情况就会变得更加复杂。

关于javascript:从字典键获取对象的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24072334/

相关文章:

javascript - searchWords.filter 不是函数

python:在函数内表现不佳的dict-错误的TypeError

c# - 以非对称方式合并两个 Dictionary<string, string>

python - 创建一个字典的字典

python - Python 3.5 内部类(枚举)中静态/类列表/字典的初始化

javascript - Babel with Gulp - 如何设置 javascript 文件转译顺序

javascript - (未捕获的语法错误 : Unexpected token : ) - What to do?

javascript - 如何使用 Vue/Vuex 设置动态对象值?

javascript - 在 JavaScript 中重复一个字符串多次

python - 比较两个字典中的键并使用 for 循环更新值