<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执行后的结果。由此可以看出你对数据传递上还有些不理解的!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)