$ 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
相等?
我知道有循环解决方案,但还有哪些其他替代方案可以在多个相同的数组中添加多个元素?
顺便说一句,我不想直接修改B
(A = B = A.concat(...)
)。
答案 0 :(得分:4)
保罗是对的,你可以这样做:
A.push.apply(A,[1, 2]);
对于那些你不知道的人,Array#push
接受变量参数,Function#apply
将接受函数的变量参数转换为接受函数的数组。
答案 1 :(得分:2)
您可以使用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
仍然引用相同的对象。