JavaScript中数组的常用操作之数组的拷贝
展开操作符
拷贝数组的一种简单方法是使用展开运算符:const clone = [... array]
,如下所示,拷贝 colors
数组:
此方法为浅拷贝(浅拷贝只解决了第一层的问题,如果值中还有对象的话就需要深拷贝)
const colors = ['white', 'black', 'gray'];
const clone = [...colors];
log(clone); // => ['white', 'black', 'gray']
log(colors === clone); // => false
Array.concat()
方法
此方法为浅拷贝(浅拷贝只解决了第一层的问题,如果值中还有对象的话就需要深拷贝)
const colors = ['white', 'black', 'gray'];
const clone = [].concat(colors);
log(clone); // => ['white', 'black', 'gray']
log(colors === clone); // => false
Array.slice()
方法
此方法为浅拷贝(浅拷贝只解决了第一层的问题,如果值中还有对象的话就需要深拷贝)
const colors = ['white', 'black', 'gray'];
const clone = colors.slice();
log(clone); // => ['white', 'black', 'gray']
log(colors === clone); // => false
深拷贝
通常在es5
中通过JSON.parse(JSON.stringify(object))
来解决。
let a = {
age: undefined,
jobs: function() {},
name: 'yck',
obj:{
a:0,
b:1
}
}
let b = JSON.parse(JSON.stringify(a))
console.log(b) // {name: "yck"}
细心点会发现该方法也是有局限性的:
• 会忽略 undefined
• 不能序列化函数
• 不能解决循环引用的对象
网友评论