js遍历json数组,求大神指导(2)

js遍历json数组,求大神指导(2),第1张

<script src="http://vod.xunlei.com/library/jquery-1.7.2.min.js"></script>

<script>

var json1=[{"age":5,"num":2,"people":3,"class":9},{"age":1,"num":3,"people":2,"class":8},{"age":4,"num":6,"people"雹晌:5,"class":3}]

var json2=[{"field":"age","typle":"sum","title":"ss"},{"field":"num","typle":"sum","title":"ss"},{"field":"people","typle":"sum","title":"ss"},{"field":"class","typle":"nosum","title":"ss"}]

//如上json1、json2两个数组,拿json1里age、num等属性去json2里遍历,若json2里field的值和json1的属性相等并且其typle的值为num,就计算json1里该属性的和最终再拼接成下面的样子

//var json3=[{"name":"求和","age":10,"num":11,"people":10}]

function test(json1,json2){

var result=[],resultJson={"name":"求和"}

var getSum=function(field){

var sum=0

for(var s in json1){

sum+=json1[s][field]||0

}

return sum

}

for(var p in json2){

if(json2[p]["typle"]=="sum"){

$.extend(resultJson,$.parseJSON('{\"'+ json2[p]["氏肆渣field"] + '\":' + getSum(json2[p]["field"]) + '}'))

}

}

result.push(resultJson)

return result

}

json3=test(json1,json2)

//检查一下结果歼悄

temp=""

for (var t in json3[0]){

temp+=t + "=" + json3[0][t] +","

}

alert(temp.slice(0,-1))//显示:name=求和,age=10,num=11,people=10

</script>

你这里的jsonstr本身就已经是对象了,而json只是字符串,也就是说对方传递过来的字符串而已。

应该写成

var jsonStr = "{qiyi:'mp4',tudou:'3gp',youku:'mp4'}"

这样可以表示jsonStr是一个字符串,而现弊高橘在要jsonStr去执行一下就可以了!

如:

var c = eval(jsonStr)

然后就可以调用了!如c.qiyi等等。不过这里不太好理解的,eval就是将jsonStr字符串当指令执行了,将执行结果传递给c而已。换一句方式可能会更好的理解的!

eval(" var c = "+jsonStr+"")

也就是说重新组合一个语句,这样可以直接使用c.qiyi了!

但其实是一样的道理的,只不过很少人会用到第二种!因为如果eval没有顺利执行时,第二种会出现错误,而第一种则会出现undefined的结果,第一种与第二种的区别就是不管是否空值,第一种c对象是存在的!而第二种却未必见得!第二种方案下,执行了一个语句,然后就感觉“凭空”开始使用一个对象了!然后这样虽是不好,其中是说明下租团边的语句都依赖于eval这样的一个细念橡节语句,所以不是很多的!

也就是说:

var c = eval("{qiyi:'mp4',tudou:'3gp',youku:'mp4'}")

就是将json执行后的结果。由此可以看出你对数据传递上还有些不理解的!


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

原文地址: http://outofmemory.cn/tougao/12207077.html

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

发表评论

登录后才能评论

评论列表(0条)

保存