JS深拷贝数组和对象

Posted Bien94

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
})

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

 

以上是关于JS深拷贝数组和对象的主要内容,如果未能解决你的问题,请参考以下文章

js的浅拷贝与深拷贝

js实现浅拷贝和深拷贝

js对象深拷贝

浅谈JS中的浅拷贝与深拷贝

JS-[浅拷贝和深拷贝]

如何实现数组深拷贝和浅拷贝?