Javascript - 通过键获取特定JSON数组元素中的属性值

时间:2011-05-05 16:24:16

标签: javascript arrays json key

我有一个像这样的JSON结构:

{
map: [
      {"key1":"valueA1", "key2":"valueA2", "key3":"valueA3"},
      {"key1":"valueB1", "key2":"valueB2", "key3":"valueB3"},
      {"key1":"valueC1", "key2":"valueC2", "key3":"valueC3"},
       .... etc
     ]
}

...我通过JSON.parse()加载到我的javascript应用程序中成为对象。

我想从对象数组的元素中检索(比方说)key3的值,其中key2 ='valueB2'。

我可以通过循环来完成,但是想知道是否有更优雅(例如单行和更有效)的方式,而不必知道数组元素的索引号?

我已经google加载网站,但收效甚微。或者我会更好地简化/删除数组以支持简单的对象列表?

感谢。

3 个答案:

答案 0 :(得分:3)

JSON通常会在所有键和值周围加上双引号,但数字除外。

然而,循环是您拥有的最有效和最佳选择。有新的函数数组迭代方法,但只能在新的JS引擎和浏览器上使用,它们可以在这里找到:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array

如果您可以自由更改JSON结构,则应将其实现为Object而不是对象数组,其中key是key2的值,值是Object。

示例:

{
    "valueB2": {
        "key1": "valueB1",
        "key2": "valueB2",
        "key3": "valueB3"
    }
}

对象的检索将是O(1)并且与obj["valueB2"]

一样简单

答案 1 :(得分:1)

没有更优雅的方法来做到这一点。没有循环,你唯一知道的就是索引。这不是你想要的标识符,所以你必须检查内容:loop:

function byKey(arr, key) {
  for ( var i=0, L=arr.length; i<L; i++ ) {
    if ( arr[i].key1 === key ) {
      return arr[i];
    }
  }
}

或类似的东西。

答案 2 :(得分:0)

要完善:从两个答案中获取想法,我采用了这个更简单的JSON结构:

[
    {"key1":"valueA1", "key2":"valueA2", "key3":"valueA3"},
    {"key1":"valueB1", "key2":"valueB2", "key3":"valueB3"},
    {"key1":"valueC1", "key2":"valueC2", "key3":"valueC3"},
    .... etc
]

使用建议的循环函数来查找“key2:”valueB2“的元素 - 大多数时候通过索引访问数组,并且偶尔通过循环搜索访问,因此这似乎是最佳平衡。我也是意识到我可以取消包含对象“map”,因为它没有添加任何实用程序。