数组理解——复制数组

比较好的理解连接:https://segmentfault.com/a/1190000018947028

  1. slice
let arr = [{name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}];
        let brr=arr.slice(0,4)
        brr[0].name=2
        console.log(arr,brr);//数组的第一个均改变

说明复制出来的是相同的数组地址

  1. concat
let arr = [{name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}];
        let brr=arr.concat()
        brr[0].name=2
        console.log(arr,brr);//数组的第一个均改变

说明复制出来的是相同的数组地址

  1. for循环方式方式 ,包括map循环,while循环
 let arr = [{name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}];
        // let brr=arr.slice(0,4)
        // let brr=arr.concat()
        let brr=[];
        for (var i = 0; i < arr.length; ++i) {
          brr.push(arr[i]);
      }
        brr[0].name=2
        console.log(arr,brr);//数组的第一个均改变

说明复制出来的是相同的数组地址

  1. 深度拷贝
let arr = [{name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}];
       // let brr=arr.slice(0,4)
       // let brr=arr.concat()
       let brr=[];
       brr=JSON.parse(JSON.stringify(arr))
       brr[0].name=2
       console.log(arr,brr);//原数组未改变

说明复制出来的是不同数组

关于JSON.parse(JSON.stringify(obj))实现深拷贝应该注意的坑:https://www.jianshu.com/p/b084dfaad501
深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝:
https://blog.csdn.net/flyingpig2016/article/details/52895620?utm_source=app

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容