将多个元素添加到相同的所有数组中

时间:2014-05-25 08:53:13

标签: javascript arrays node.js

$ 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相等?

我知道有循环解决方案,但还有哪些其他替代方案可以在多个相同的数组中添加多个元素?

顺便说一句,我不想​​直接修改BA = B = A.concat(...))。

2 个答案:

答案 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.length0分别代表数组的起始位置和要删除的元素数。

我们将要插入的实际元素数组连接起来。因此,传递给A.splice的参数看起来像这样

A.splice(A.length, 0, 1, 2);

splice执行就地操作时,AB仍然引用相同的对象。