<script> function copy(a) { ret = {}; for (sth in a) { temp = a[sth]; if (temp instanceof Array) { var ddddd = []; for (i in temp) { var b = copy(temp[i]); ddddd = ddddd.concat(b); } ret[sth] = ddddd; } else { ret[sth] = a[sth]; } } return ret; } console.log ( copy({name:"馬良",age:"31",Books:[{name:"C#入門經典",title:"好書"}, {name:"js入門經典",title:"好書"}]} ) ); </script>
運行上面的代碼,發現copy方法不正確,讓我的同事李鑫看了一下,后來經過大家的一番討論,才發現里面的問題。
js語言不嚴謹,臨時變量得使用,在遞歸調用時容易混淆,解決問題的方式就是不用臨時變量,都用直接變量。
改變后得代碼如下
<script> function copy(a) { ret = {}; for (sth in a) { if (a[sth] instanceof Array) { ret[sth]=[]; for (i in a[sth]) { ret[sth].push(copy(a[sth][i])); } } else { ret[sth] = a[sth]; } } return ret; } console.log ( copy({name:"馬良",age:"31",Books:[{name:"C#入門經典",title:"好書"}, {name:"js入門經典",title:"好書"}]} ) ); </script>
可是改了以后,還是不對,誰能幫助我下。給你發個紅包沒問題的,100以下的都行。
通過一段時間的技術積累,終於把問題解決了,給大家獻上代碼
<script> function copy(a) { var ret = {}; for (var sth in a) { var temp = a[sth]; if (temp instanceof Array) { var ddddd = []; for (i in temp) { var b = copy(temp[i]); ddddd = ddddd.concat(b); } ret[sth] = ddddd; } else { ret[sth] = a[sth]; } } return ret; } console.log ( copy({name:"馬良",age:"31",Books:[{name:"C#入門經典",title:"好書"}, {name:"js入門經典",title:"好書"}]} ) ); </script>
結果如下
里面的變量經常會變,經過調查發現之前的變量沒有var 關鍵字,以至於變量都是全局變量,所以上面的代碼中的變量前面都加var,保持變量的獨立性。
變量 var和不加var的區別在於var 聲明的變量是局部變量。不用var生命的變量是全局變量。