关于javascript:Array.push()无法按预期工作

Array.push() doesn't work as expected

本问题已经有最佳答案,请猛点这里访问。

我有一个阵列。出于测试目的,我输出如下内容:

1
2
3
4
5
6
7
for (var i=0; i<array1.length; i++){
        console.log(i + ':' + array1[i]);
    }


0:String1
1:String2

现在我有了第二个数组。我要做的是将array1的内容推入array2。

我用这条线做这个:

1
array2.push(array1);

不幸的是,第一个数组的内容AO只存在于第二个数组的一个索引中。用逗号分隔。

例如,如果我们在操作之后使用查看第二个数组的内容,它将是这样的:

1
2
3
4
5
6
7
8
9
10
for (var i=0; i<array1.length; i++){
        console.log(i + ':' + array1[i]);
    }


0:Old_string1
1:Old_string2
2:Old_string3
3:Old_string4
4:String1,String2

虽然我想把它拿出来:

1
2
4:String1
5:String2


您应该尝试:

1
array2 = array2.concat(array1);

或ES6破坏

1
array2.push(...array1);


array.push会将一个或多个对象推送到数组。不能在push()方法中传递完整数组,否则内容将被视为一个对象。要将两个数组组合成一个,请使用concat。


array.push不会这样做。您需要array.concat:

1
2
3
4
5
var array1 = ['a', 'b', 'c'];
var array2 = ['d', 'e', 'f'];

console.log(array1.concat(array2));
// expected output: Array ["a","b","c","d","e","f"]


使用pushapply

1
2
3
4
const a1 = ["all","my","strings"];
const a2 = ["belong","together"];
Array.prototype.push.apply(a1, a2);
console.log(a1);


您应该使用spread操作符(...来破坏array1中的值,并将这些值推入array2中。就像这样:

埃多克斯1〔3〕

这将把array1中的所有strings分离成单独的值,然后将它们推入。ES6中引入了一点很好的句法糖分。