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

[1,2] + [3,4]

它的答复是:

"1,23,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从数组转换为字符串!记住这一点。

其他回答

它将单个数组转换为字符串,然后组合字符串。

从ES6开始,我们可以使用展开运算符做类似的事情:

[...[1, 2], ...[3, 4]]

给:

[1, 2, 3, 4]

它也适用于命名变量:

const a = [1, 2];
const b = [3, 4];
const array = [...a, ...b];

给出相同的结果。

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]在JavaScript中等同于求值:

new Array( [1,2] ).toString() + new Array( [3,4] ).toString();

所以为了解决你的问题,最好的方法是在原地添加两个数组,或者不创建一个新数组:

var a=[1,2];
var b=[3,4];
a.push.apply(a, b);

看起来JavaScript正在将数组转换为字符串并将它们连接在一起。如果要将元组添加到一起,则必须使用循环或映射函数。