search

Home  >  Q&A  >  body text

javascript - 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数组数据量庞大的情况下很耗性能。希望有大牛来指点指点。
怪我咯怪我咯2902 days ago514

reply all(5)I'll reply

  • 迷茫

    迷茫2017-04-10 15:07:32

    如果你只是偶尔查一次,那就遍历吧,用 [].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
    }
    

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

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 15:07:32

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

    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"}
    ]
    

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:07:32

    直接用查找表吧

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

    jsonDic[key] 这样获取

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 15:07:32

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

    reply
    0
  • PHPz

    PHPz2017-04-10 15:07:32

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

    reply
    0
  • Cancelreply