nodejs扩展运算符的应用
nodejs复制数组,合并数组
1、复制数组:
数组是符合的数据类型,直接复制的话,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组。
const
a1 = [1,2];
const a2 = a1;
console.log("------a1=",a1,'------a2=',a2);
a2[0]=22222;
console.log("------a1=",a1,'------a2=',a2);
//------a1= [ 1, 2 ] ------a2= [ 1, 2 ]
//------a1= [ 22222, 2 ] ------a2= [ 22222, 2 ]
上面代码中,a2并不是a1的克隆,而是指向同一份数据的另一个指针。修改a2,会直接导致a1的变化。
es5只能用变通的方法来复制数组。
const a1 = [1,2];
const a2 = a1.concat();
console.log("------a1=",a1,'------a2=',a2);
a2[0]=22222;
console.log("------a1=",a1,'------a2=',a2);
//------a1= [ 1, 2 ] ------a2= [ 1, 2 ]
//------a1= [ 1, 2 ] ------a2= [ 22222, 2 ]
上面代码中,a1会返回原数组的克隆,再修改a2就不会对a1产生影响。
扩展运算符提供了复制数组的简便写法。
const a1 = [1, 2];
const a2 = [...a1];
const [...a2] = a1;
上面的两种写法,a2都是a1的克隆。
(2)合并数组
扩展运算符提供了数组合并的新写法。
const arr1 = ['a', 'b'];
const arr2 = ['c'];
const arr3 = ['d', 'e'];
// ES5 的合并数组
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e' ]
// ES6 的合并数组
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e' ]
不过,这两种方法都是浅拷贝,使用的时候需要注意。
const a1 = [{ foo: 1 }];
const a2 = [{ bar: 2 }];
const a3 = a1.concat(a2);
const a4 = [...a1, ...a2];
a3[0] === a1[0] // true
a4[0] === a1[0] // true
上面代码中,a3和a4是用两种不同方法合并而成的新数组,但是它们的成员都是对原数组成员的引用,这就是浅拷贝。如果修改了原数组的成员,会同步反映到新数组。