如何在javascript中进行"平推"?

dr *_*rry 25 javascript arrays push flatten

我想将源数组的所有单个元素推送到目标数组,

target.push(source);
Run Code Online (Sandbox Code Playgroud)

将源的引用放在目标列表上.

而不是我想做的事:

for (i = 0; i < source.length; i++) {
    target.push(source[i]);
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法在javascript中更优雅,没有明确编码重复循环?

虽然我在这,但正确的用语是什么?我不认为"平推"是正确的.谷歌搜索没有产生任何结果,因为源和目标都是数组.

gbl*_*zex 49

apply 做你想要的:

var target = [1,2];
var source = [3,4,5];

target.push.apply(target, source);

alert(target); // 1, 2, 3, 4, 5
Run Code Online (Sandbox Code Playgroud)

MDC - 申请

调用具有给定值的函数和作为数组提供的 参数.

  • +1如果必须保留对原始数组的引用,这是最佳解决方案.然后,您可以创建一个扩展数组原型的方法:Array.prototype.pushAll = function(items){Array.prototype.push.apply(this,items); }; (2认同)
  • 当您在javascript中阅读concat方法的说明时:“此方法不会更改现有数组,但会返回一个新数组,其中包含联接数组的值。” 他们说:“将返回一个新数组...”在这种情况下,如果您尝试修改api的数组,就我而言,在beforeSubmit事件中的JQuery表单插件会添加新项,如果使用concat,您将创建一个新数组,如果您尝试用新数组替换现有数组,则不会通知api有关此更改的信息。 (2认同)

Dar*_*rov 24

你可以使用concat方法:

var num1 = [1, 2, 3];  
var num2 = [4, 5, 6];  
var num3 = [7, 8, 9];  

// creates array [1, 2, 3, 4, 5, 6, 7, 8, 9]; num1, num2, num3 are unchanged  
var nums = num1.concat(num2, num3);
Run Code Online (Sandbox Code Playgroud)

  • 这不符合OP的要求.OP希望就地修改阵列. (5认同)

kir*_*ala 15

更简单的方法来做到这一点。

   var arr1 = [1,2,3] 
   var arr2 = [4,5,6] 
   arr1.push(...arr2) //arr1 now contains [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)


Moh*_*man 6

您可以简单地使用传播语法

var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];

arr1 = [...arr1, ...arr2];
    // [0, 1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

或者:

var arr1 = ['a', 'b', 'c'];
var arr2 = [1, 2, 3, ...arr1];
        // [1, 2, 3, 'a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

演示:

var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];

arr1 = [...arr1, ...arr2];
    // [0, 1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)