为什么数组复制不了内部的对象呢?
我有一个数组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;
}
最简单的copy JSON.parse(JSON.stringify(obj));
@imhered 简单粗暴