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是用两种不同方法合并而成的新数组,但是它们的成员都是对原数组成员的引用,这就是浅拷贝。如果修改了原数组的成员,会同步反映到新数组。


你可能感兴趣的:(nodejs扩展运算符的应用)