展开运算符
ES6 引入了展开运算符(...),它可能是对数组进行浅拷贝的最简单和最常见的方法。
- let x = [1, 2, 3, 4];
- let y = [...x];
Array.from()
Array.from() 是一个非常强大的 API,可用来做许多不同的事,包括创建数组的副本。
- let x = [1, 2, 3, 4];
- let y = Array.from(x);
Array.prototype.slice()
与展开运算符类似,Array.prototype.slice() 可用于对数组进行浅拷贝。
- let x = [1, 2, 3, 4];
- let y = x.slice();
Array.prototype.map()
这是一个非传统的方法,可以用 Array.prototype.map() 通过将数组的每个元素映射到自身,来创建新的数组。
- let x = [1, 2, 3, 4];
- let y = x.map(i => i);
Array.prototype.filter()
同样也可以用 Array.prototype.filter() 返回每个元素的 true 值,从而产生一个包含所有原始数组元素的新数组。
- let x = [1, 2, 3, 4];
- let y = x.filter(() => true);
Object.assign()
最后可以通过 Object.assign(),使用方式和克隆对象完全相同,同样适用于克隆数组。
- let x = [1, 2, 3, 4];
- let y = Object.assign([], x);