簡體   English   中英

用包含參數數組的數組調用函數,而不是僅列出數組

[英]Call a function with an array which holds array of parameters instead of listing just arrays

不好意思的標題,但是我要問的是:

假設您具有以下功能:

function cartesianProductOf() {
      return Array.prototype.reduce.call(arguments, function(a, b) {
        var ret = [];
        a.forEach(function(a) {
          b.forEach(function(b) {
            ret.push(a.concat([b]));
          });
        });
        return ret;
      }, [[]]);
}

應該這樣稱呼:

cartesianProductOf([1, 2, 3], [4], [5, 6], ['a','b']);

我面臨的問題是我創建了一個動態數組,並且基本上有了一個數組,該數組包含應發送給函數的參數,如下所示:

var sets = [[1, 2, 3], [4], [5, 6], ['a','b']];

現在,當然要打個電話:

cartesianProductOf(sets);

不管用。 沒錯,我可以很容易地對此修改cartesianProductOf()函數(僅顯示重要部分):

function cartesianProductOf() {
    return Array.prototype.reduce.call(arguments[0], function(a, b) {

但是我想知道在javascript中是否有一種方法可以調用具有sets變量的cartesianProductOf ,而不必更改cartesianProductOf的代碼以接受參數[0]? 另外,我希望將標題更改為更合適的名稱(因為我一直在網站上搜索該關鍵字,很顯然這是錯誤的,因為我找不到相關信息)。

正如DCoder在評論中回答的那樣-我必須使用如下的apply方法:

cartesianProductOf.apply(null, sets)

這個SO線程很好地解釋了JavaScript中applycall函數之間的區別,並引用:

主要區別在於apply允許您將參數作為數組調用函數; 調用需要顯式列出參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM