<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生命的變量是全局變量。
