我有一个像这样的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加载网站,但收效甚微。或者我会更好地简化/删除数组以支持简单的对象列表?
感谢。
答案 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”,因为它没有添加任何实用程序。