我想将一个数组的元素添加到另一个数组中,所以我尝试了这样做:

[1,2] + [3,4]

它的答复是:

"1,23,4"

这是怎么回事?


当前回答

在JavaScript中,二进制加法运算符(+)既可以执行数字加法,也可以执行字符串连接。然而,当它的第一个参数既不是数字也不是字符串时,它会将其转换为字符串(因此是"1,2"),然后它会对第二个"3,4"进行同样的操作,并将它们连接到"1,23,4"。

尝试使用Arrays的"concat"方法:

var a = [1, 2];
var b = [3, 4];
a.concat(b) ; // => [1, 2, 3, 4];

其他回答

Some answers here have explained how the unexpected undesired output ('1,23,4') happens and some have explained how to obtain what they assume to be the expected desired output ([1,2,3,4]), i.e. array concatenation. However, the nature of the expected desired output is actually somewhat ambiguous because the original question simply states "I wanted to add the elements of an array into another...". That could mean array concatenation but it could also mean tuple addition (e.g. here and here), i.e. adding the scalar values of elements in one array to the scalar values of the corresponding elements in the second, e.g. combining [1,2] and [3,4] to obtain [4,6].

假设两个数组都有相同的arity/length,这里有一个简单的解决方案:

Const arr1 = [1,2]; Const arr2 = [3,4]; Const add = (a1, a2) => a1。Map ((e, i) => e + a2[i]); console.log(添加(arr1 arr2));// ==> [4,6]

这是因为,+运算符假设操作数是字符串,如果它们不是数字。因此,如果它不是一个数字,它首先将它们转换为字符串和连接,以给出最终结果。此外,它不支持数组。

+连接字符串,因此它将数组转换为字符串。

[1,2] + [3,4]
'1,2' + '3,4'
1,23,4

要组合数组,使用concat。

[1,2].concat([3,4])
[1,2,3,4]

另一个使用简单的“+”符号的结果是:

[1,2]+','+[3,4] === [1,2,3,4]

所以像这样的东西应该工作(但是!):

var a=[1,2];
var b=[3,4];
a=a+','+b; // [1,2,3,4]

... 但它会将变量a从数组转换为字符串!记住这一点。

这完全是你让它做的。

你加在一起的是数组引用(JS将其转换为字符串),而不是看起来的数字。这有点像字符串相加:"hello " + "world" = "hello world"