javascript - json数组 根据动态key获得value 有什么好的方法?
怪我咯
怪我咯 2017-04-10 15:05:32
[JavaScript讨论组]

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

走同样的路,发现不同的人生

全部回复(5)
迷茫

如果你只是偶尔查一次,那就遍历吧,用 [].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" : {"id": "1", "name": "A1"},
"2" : {"id": "2", "name": "A2"},
"3" : {"id": "3", "name": "A3"},
"4" : {"id": "4", "name": "A4"},
"5" : {"id": "5", "name": "A5"}
]
大家讲道理

直接用查找表吧

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

jsonDic[key] 这样获取

高洛峰

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

PHPz

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号