JavaScript深克隆(仅数组)

JavaScript深克隆

为什么需要深克隆

对于引用类型值(数组,对象,函数,正则表达式),在进行var a = b;传值时,内存中不产生新的副本,而是新变量也指向内存中同一个地址。
因此,在进行==判断时,比较的是两的内存是否相同。
同时,Boolean([ ] == [ ])的值为false。
要想深克隆的话,就要使用递归,来解决数组中的某项是数组的问题。否则的话,可能就会克隆不完全,新数组中还有一部分和原数组的指向内存地址一样。

<script>
//JS仅判断数组和基本类型值的深克隆
//arr1为原数组
var arr1=[12,11,34,[11,['士大夫'],22],65];
//函数的作用为深克隆
function deepClone(arr){
    //存放结果的数组
    var result=[];
    for(var i=0; i<arr.length; i++){
        //判断是否为数组,其实也可能是对象,这里先不考虑
        if(Array.isArray(arr[i])){
            //该项是数组的话,使用递归
            //递归后获得的该项也要放到result结果数组中去
            result.push(deepClone(arr[i]));
        }else{
            result.push(arr[i]);
        }
    }
    //将结果数组返回
    return result;
}
//将函数返回的结果传给result变量
var result = deepClone(arr1);
console.log(result);
//检查数组中的数组是否一致,预期结果false
console.log(arr1[3]==result[3]);
//在原数组的'士大夫'后面加上88这项
arr1[3][1].push(88);
//结果显示两个数组不一样result没有88这一项
//如果是var arr2 = arr1;这样传值的话,arr1和arr2中都将会有88这一项
console.log(arr1);
console.log(result);
</script>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最小醉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值