2012-12-17 171 views
0

這可能是重複的,但我在找到正確的答案方面沒有多大成功。我想實現這樣的事情:將可選的多個參數傳遞給一個函數

var joinArrays = function(myCollectionOfArguments) { 
    return array.concat(array1, array2, ..... , arrayN); 
}; 

在這種情況下,myCollectionOfArgumentsarray1, array2, ..... , arrayN。我怎麼能實現這樣的事情?我知道,如果我有一個回調函數,我會盡可能多地傳遞參數,我想用.apply(),但在這種情況下,我對這種方法有些困惑。

編輯:所以,爲了更多的描述:不是傳遞只是一個說法,我想是能夠通過儘可能多的,因爲我想不必指定它,當我定義函數的參數,在我的情況myCollectionOfArguments ,在定義函數時只是一個參數,但是當我想使用函數時,我希望能夠傳遞多個參數;

+0

爲什麼你會你需要['apply']的回調函數(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply)?告訴我們你是如何嘗試使用它的;一個'joinArrays'的示例調用也可以幫助 – Bergi

+0

「這樣的事情」實際上不足以描述。 –

+0

所以,爲了更具描述性:不是隻傳遞一個參數,而是我可以傳遞儘可能多的數據,而無需在定義函數的參數時指定它,在我的例子中,myCollectionOfArguments只是一個參數參數,但是當我想要使用函數時,我希望能夠傳遞多個參數; – Roland

回答

2

如果我得到你的意圖的權利,請嘗試:

var joinArrays = function(a) { 
    return a.concat.apply(a, Array.prototype.slice.call(arguments, 1)); 
}; 

var foo = joinArrays([1, 2], [3, 4], [5, 6]); 

console.log(foo); // => [1, 2, 3, 4, 5, 6] 
+0

正是@Yoshi :) – Roland

+0

爲什麼要用一個顯式參數? (好吧,你也可以加入字符串,但是...) – Bergi

+0

@Bergi沒有真正的理由;) – Yoshi

0
function testFunction() 
{ 
    var arg1 = arguments[0]; 
    var arg2 = arguments[1]; 
    var arg3 = arguments[2]; 
} 
0

不知道我理解,但你可以通過陣列的任意數目:

joinArrays([1,2,3], [4,5,6], [7,8], [9,10,11,12]) 

後來讀所有的人利用內幕joinArrays()特殊arguments變量。

4

可以使用arguments object爲參數的任意量,你甚至可以直接傳遞到.apply

var joinArrays = function() { 
    return [].concat.apply([], arguments); 
}; 

順便說一句,使用bind在這裏會更優雅:

var joinArrays = Array.prototype.concat.bind([]); 
+0

綁定是ECMAScript 5雖然,雅?如果需要考慮的話,不要與舊版瀏覽器兼容。 – AlienWebguy

+0

是的,但很容易和簡單的墊片。我的座右銘:無需謹慎使用它,如果有人抱怨:只需添加polyfill :-)缺乏支持的瀏覽器今天是少數。 – Bergi

+0

取決於網站或應用程序。去年我在Dictionary.com工作,仍然有超過60%的流量來自IE8。雖然'bind'更優雅,你的ECMAScript 4解決方案只有幾個字符,所以在這種情況下,我甚至不會考慮使用'bind'。 – AlienWebguy

相關問題