3 回答
TA贡献1829条经验 获得超6个赞
因为在copyarr(obj[i]);的时候你没有赋值为j[i],还有就是j这个数组应该是一个中间变量,用来保存a的子元素中也存在数组的情况,因为你这个copyarr这个函数是返回了j,所以不用担心函数执行的结果不正确。
你可以试试这样:
<script type="text/javascript">
var a=[1,2,3,4,5,[1,2,3,4]];
// var j=[];
function copyarr(obj){
var j = [];
var n=obj instanceof Array;
for (var i=0;i<obj.length;i++) {
if(typeof obj[i]=='object'){
// (obj[i]);
j[i] = copyarr(obj[i]);
}else{
j[i]=obj[i];
}
}
return j;
}
var r = copyarr(a);
console.log(r)//[1,2,3,4,5]
</script>
TA贡献1865条经验 获得超7个赞
if(typeof obj[i]=='object'){
copyarr(obj[i]);
}else{
j[i]=obj[i];
}
1.如果if成立了.那么会把二维数组[1,2,3,4]传进去重新执行.
2.重新执行,那么i=0, j[i]=obj[i] 就变成这样 j[0] = obj[0], 会把第一次的值覆盖.
3.这块j数组的下标就不能是i, 换成j[j.length-1].就不会覆盖原来的值.
TA贡献1982条经验 获得超2个赞
你把内部的数组 [1,2,3,4] 改成 [6,7,8,9] 你就知道为什么了。
得到的结果是: [6, 7, 8, 9, 5]
其实导致的原因 还是第二次循环的 时候 j[i] 造成的 原因
添加回答
举报