数组理解——复制数组

2020-10-29  本文已影响0人  波_0903

比较好的理解连接: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

上一篇 下一篇

猜你喜欢

热点阅读