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数组数据量庞大的情况下很耗性能。希望有大牛来指点指点。
迷茫2017-04-10 15:07:32
如果你只是偶尔查一次,那就遍历吧,用 [].every
还是很容易写的,或者用 for ... in
也不难。
但是如果需要经常查找,那最好建立一个查找表,比如
javascript
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
中取就行了
javascript
var id = needId() var obj = idMap[id] // the found object or undefined
如果还需要按 name
来查找,可以再建一个查找表
javascript
var nameMap = creaetLookMap("name")
如果 name
不是唯一的,那创建查找表的时候就要耍点手段,保存一个数组而不是一个对象
javascript
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 }
注:程序未实际运行验证,可能会有一些小问题
天蓬老师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"}
]