将多个元素添加到所有相同的数组中
$ node > A = [0, 1, 23] [ 0, 1, 23 ] > B = A [ 0, 1, 23 ] > A.splice(0, 3) [ 0, 1, 23 ] > B [] > A [] > A = A.concat([1, 2]) [ 1, 2 ] > B []
这是对的。 但是,在调用concat
, B
数组是否等于A
?
我知道有循环解决scheme,但还有什么其他的替代scheme可以在多个数组中添加多个相同的元素?
顺便说一句,我不想直接修改B
( A = B = A.concat(...)
)。
保罗是正确的,你可以这样做:
A.push.apply(A,[1, 2]);
对于那些你不知道, Array#push
接受variables参数,而Function#apply
将一个variables参数接受函数转换为数组接受函数。
你可以像这样使用Array.prototype.splice
本身
var A = [0, 1, 23], B = A; A.splice.apply(A, [A.length, 0].concat([1, 2])); console.log(A, B, A === B); // [ 0, 1, 23, 1, 2 ] [ 0, 1, 23, 1, 2 ] true
这里, A.length
和0
表示数组的起始位置和要移除的元素的数量。
我们将其与要插入的实际元素数组连接起来。 所以,传递给A.splice
的论据看起来就像这样
A.splice(A.length, 0, 1, 2);
由于splice
就地操作, A
和B
仍然引用相同的对象。