开发者社区> 问答> 正文

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

json数组如下:

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

展开
收起
小旋风柴进 2016-03-26 08:28:57 2787 0
1 条回答
写回答
取消 提交回答
  • 如果你只是偶尔查一次,那就遍历吧,用 [].every 还是很容易写的,或者用 for ... in 也不难。

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

    function 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 中取就行了
    
    var id = needId()
    var obj = idMap[id]    // the found object or undefined

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

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

    function 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
    }
    2019-07-17 19:15:05
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载