JS深拷贝数组和对象

  有时候在些JS代码时不小心直接给数组和对象直接赋值,可能不会直接产生什么副作用,但若是遇到了奇怪的问题了,这很有可能就是在拷贝数组或者对象时时进行浅拷贝,接受者在不知不觉地改变了某些元素的值,从而导致原始值就莫名其妙地被同步修改了;面对这种情况,最好对数组或者对象进行深拷贝,为了不影响某些元素的丢失(比如某些value值是undefined或者function),此时强力推荐使用循环的方式进行拷贝。假设目前有个数组arrayList,并且每个元素都是对象,那么就需要进行两次的循环,逻辑代码如下所示:

let arrayList = [对象1, 对象2,......,对象n] 
// 此时将数组arrayList做深度拷贝
let deepCopyList = []
arrayList.foreach(item => {
    let copyMap = {}
    for (key in item) {
        copyMap[key] = item[key]  // 这里假设item多是简单的元素的Map对象
    }
    deepCopyList.push(copyMap)
})

// 说明:可以根据实际的数据结构来挑战循环层次,也可以采用递归的方式处理

 

posted @ 2020-04-16 23:19  晒太阳的兔子很忙  阅读(225)  评论(0编辑  收藏  举报