首页 > json数组 根据动态key获得value 有什么好的方法?

json数组 根据动态key获得value 有什么好的方法?

json数组如下:

javascript    var jsonArr = [
        {"id": "1", "name": "A1"},
        {"id": "2", "name": "A2"},
        {"id": "3", "name": "A3"},
        {"id": "4", "name": "A4"},
        {"id": "5", "name": "A5"}
    ]
现在有个动态key 1或者2 如何根据我的key获得对应的value值  除了简单的循环for in外 有没有更好的方法? 因为我个人认为如果json数组数据量庞大的情况下很耗性能。希望有大牛来指点指点。

如果是我,我会让id和下标一致, 然后 json[i] .....


如果你只是偶尔查一次,那就遍历吧,用 [].every 还是很容易写的,或者用 for ... in 也不难。

但是如果需要经常查找,那最好建立一个查找表,比如

javascriptfunction createLookMap(field) {
    var map = {}
    for (var i = 0; i < jsonArr.length; i++) {
        var item = jsonArr[i]
        var key = item[field]
        map[field] = item
    }
    return map
}

var idMap = createLookMap("id")

在查找的时候只需要直接从 idMap 中取就行了

javascriptvar id = needId()
var obj = idMap[id]    // the found object or undefined

如果还需要按 name 来查找,可以再建一个查找表

javascriptvar nameMap = creaetLookMap("name")

如果 name 不是唯一的,那创建查找表的时候就要耍点手段,保存一个数组而不是一个对象

javascriptfunction createLookMap(field) {
    var map = {}
    for (var i = 0; i < jsonArr.length; i++) {
        var item = jsonArr[i]
        var key = item[field]
        var list = map[key]
        fi (!list) {
            map[key] = list = []
        }
        list.push(item)
    }
    return map
}

注:程序未实际运行验证,可能会有一些小问题


直接用查找表吧

var jsonDic = [ 
    "1" : "A1",
    "key" : value
]

jsonDic[key] 这样获取


返回的数据格式要求规范,接口统一


如果真的量很大,并且反复用的话,你可以把数据结构改成:

var jsonDic = [ 
"1" : {"id": "1", "name": "A1"},
"2" : {"id": "2", "name": "A2"},
"3" : {"id": "3", "name": "A3"},
"4" : {"id": "4", "name": "A4"},
"5" : {"id": "5", "name": "A5"}
]
【热门文章】
【热门文章】