2011-03-09 71 views
13

這裏是我想要做的添加兩個數組,而無需使用concat方法

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());不能很好地工作。

回答

44
>>> 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); 
+0

有趣的使用'apply'的一個陣列的所有成員推到另一個陣列+1 – meouw 2011-03-09 01:47:13

+0

我以前見過的適用方法,但從來沒有真正瞭解它(注意自我需要研究應用),但它確實是一種簡潔的做我想做的事情的方式。第二種方法與第一種方法有什麼不同?使用Array.prototype而不是x.push.apply。 – qw3n 2011-03-09 01:55:30

+0

兩者都相同。調用'x.push(y)'意味着「調用函數'x.push',其範圍爲'x',參數'[y]',在這種情況下'x.push'解析爲'Array.prototype.push' ,因此:'Array.prototype.push.apply(x,[y])'。我只提到了第二種形式,因爲它有時最好只引用'x'一次。 – emulbreh 2011-03-11 18:10:13

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 
+3

錯誤,你返回的數組不是修改過的數組這是傳遞給函數,它是一個副本 – meouw 2011-03-09 01:45:20

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 
相關問題