为什么数组复制不了内部的对象呢?
发布于 7 年前 作者 rysinal 2633 次浏览 来自 问答

我有一个数组groups,groups数组里面元素都是对象,在对groups进行元素值删除之前,插入了一个异步函数,groups作为这个函数的一个参数;紧接着我对groups里面的对象进行了不必要的属性删除(delete group[i].key1),另外执行比较慢的异步函数拿key1的值时,发现已经不存在了; 即使使用了copygroups=groups.concat();然后把copygroups 作为参数传递也不行(不是深度复制吗??) 如果希望异步函数处理时拿到的数组是完整的,怎么处理比较好呢?新人求带,不胜感激

附例子:

let arr1 = [{"a1":"v1","a2":"v2","a3":"v3","a4":"v4"}]
let arr2=arr1.concat()
console.log(arr2)	// [{a1: "v1", a2: "v2", a3: "v3", a4: "v4"}]
delete arr1[0]['a2']
console.log(arr1)	// [{a1: "v1", a3: "v3", a4: "v4"}]
console.log(arr2)	// [{a1: "v1", a3: "v3", a4: "v4"}]		为什么arr2也会随着arr1的操作而改变??
3 回复

已解决

var objDeepCopy = function (source) {
    var sourceCopy = source instanceof Array ? [] : {};
    for (var item in source) {
        sourceCopy[item] = typeof source[item] === 'object' ? objDeepCopy(source[item]) : source[item];
    }
    return sourceCopy;
}

参考:http://blog.csdn.net/wodeai1235/article/details/61191932

最简单的copy JSON.parse(JSON.stringify(obj));

@imhered 简单粗暴

回到顶部