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

Add multiple elements into all arrays that are equal

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ 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(...))。


保罗是对的,你可以这样做:

1
A.push.apply(A,[1, 2]);

对于不知道的人,Array#push接受变量参数,Function#apply将变量参数接受函数转换为数组接受函数。


你可以使用Array.prototype.splice本身,就像这样

1
2
3
4
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提交的论点如下

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

由于splice已经到位,AB仍然指同一对象。