不使用concat方法添加两个数组

时间:2011-03-09 01:14:57

标签: javascript

以下是我想做的一个示例

function test(r){
  var arr = ['d','e','f'];
  r.push(arr);
  /*
  More Code
  */
  return r;
}
var result = test(['a','b','c']);
alert(result.length);//I want this to alert 6

我需要做的是传入一个数组并将其他数组附加到它的末尾然后返回数组。由于通过引用传递,我不能使用array.concat(array2);。有没有办法做到这一点,而不使用像for循环这样的东西逐个添加元素。我试过像r.push(arr.join());这样的东西但是也没用。另外,我希望在数组中有对象的选项,所以r.push(arr.join());实际上不能很好地工作。

3 个答案:

答案 0 :(得分:48)

>>> var x = [1, 2, 3], y = [4, 5, 6];
>>> x.push.apply(x, y) // or Array.prototype.push.apply(x, y)
>>> x
[1, 2, 3, 4, 5, 6]

或者使用destructuring,您现在可以执行此操作

//generate a new array
a=[...x,...y];
//or modify one of the original arrays
x.push(...y);

答案 1 :(得分:2)

function test(r){
  var _r = r.slice(0), // copy to new array reference
      arr = ['d','e','f'];

  _r = _r.concat(arr); // can use concat now

  return _r;
}
var result = test(['a','b','c']);
alert(result.length); // 6

答案 2 :(得分:0)

这是emulbreh's answer,我只是发布了我做的测试来验证它。 所有的功劳都归功于emulbreh

// original array
var r = ['a','b','c'];

function test(r){
  var arr = ['d','e','f'];
  r.push.apply(r, arr);

  /*
  More Code
  */
  return r;
}
var result = test( r );
console.log( r ); // ["a", "b", "c", "d", "e", "f"]
console.log( result === r ); // the returned array IS the original array but modified