有时候在些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) }) // 说明:可以根据实际的数据结构来挑战循环层次,也可以采用递归的方式处理