let arr = [
{name: 'Bob', age: 12},
{name: 'Lucy', age: 10},
{name: 'Alix', age: 11}
]
let arr1 = [...arr]
arr1[0].age = 99
console.log(arr[0].age) // 99
显而易见:es6 的这种拷贝数组方法不合适,因为 arr 里的都是对象,那现在问题就是如何深拷贝 arr 这个数组?
let arr = [
{name: 'Bob', age: 12},
{name: 'Lucy', age: 10},
{name: 'Alix', age: 11}
]
let arr1 = [...arr]
arr1[0].age = 99
console.log(arr[0].age) // 99
显而易见:es6 的这种拷贝数组方法不合适,因为 arr 里的都是对象,那现在问题就是如何深拷贝 arr 这个数组?
递归调用浅拷贝吧。
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
这种应当算解构赋值吧,简单点理解就是arr1[0] = arr[0],arr1[1]=arr[1]...所以应当是个引用赋值,浅的不行。用JSON拷贝的话,对象的方法复制不出去。可以试一下map结合assign,或者递归复制
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
为什么不用
lodash
的深度克隆技术?一行代码搞定,优雅直观: