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

json数组 根据动态key获得value 有什么好的方法,第1张

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

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

function createLookMap(field) {

var map = {}

for (var i = 0i <jsonArr.lengthi++) {

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 = 0i <jsonArr.lengthi++) {

var item = jsonArr[i]

var key = item[field]

var list = map[key]

fi (!list) {

map[key] = list = []

}

list.push(item)

}

return map

}

<html>

<head>

<meta http-equiv="Content-Type" content="text/htmlcharset=gbk"/>

<script type="text/javascript">

var smsTypeDesc = {"4":"回访短信","3":"邮件短信","aa":"测试短信"}

function EnumaKey(){

for(var key in smsTypeDesc){

alert(key)

}

}

function GetVal(){

var key = prompt("请输入要查询的key","4")

if("undefined"==typeof(smsTypeDesc)) return

if("undefined"==typeof(smsTypeDesc[key])){

alert("输入的key:"+key+", 在json对象中不存在!")

return

}

alert("您输入的key是:"+key + ",该key所对应的值是:"+smsTypeDesc[key])

}

function GetValByKey(){

alert(smsTypeDesc.aa)

}

</script>

</head>

<body>

Json对象:<br/>

<pre>

var smsTypeDesc = {"4":"回访短信","3":"邮件短信","aa":"测试短信"}

</pre>

<input type="button" onclick="EnumaKey()" value="遍历smsTypeDesc所有key"/>

<input type="button" onclick="GetVal()" value="获取smsTypeDesc动态指定key的值"/>

<input type="button" onclick="GetValByKey()" value="获取smsTypeDesc key aa 所对应的值"/>

</body>

</html>


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7872937.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存