2017-02-05 14 views

答えて

2

関数は、配列(明示的に単一の引数)またはargumentsオブジェクト(暗黙のうちに、可変数の引数を持つ)の任意の値のシーケンスを受け入れることができます。明示的

- アイテムの配列を受け入れる:

function add(items) { 
    for (var i = 0; i < items.length; i++) 
    x.push(items[i]); 
    } 
} 

add([[4, "d"], [5, "e"]]) 

暗黙的に#1 - 単一の値として供給される任意の数のパラメータを受け入れる:

function add(/* item1, item2, .. */) { 
    for (var i = 0; i < arguments.length; i++) 
    x.push(arguments[i]); 
    } 
} 

add([4, "d"], [5, "e"]) 

暗黙的に#2 - 任意の数を受け入れますペアとして提供されるパラメータ:

function add(/* k1, v1, k2, v2, .. */) { 
    for (var i = 0; i < arguments.length; i += 2) 
    x.push([arguments[i], arguments[i+1]) 
    } 
} 

add(4, "d", 5, "e") 

Array.spliceまたはconcat役に立つかもしれません。簡潔性および一貫性のために示されていない。

+0

連結は、forループを使用する理由私の最初の選択肢、でしょうか? – goldylucks

+0

@ goldylucks配列を反復したり操作したりする別の方法は、関数を呼び出すことを避けるという問題には二次的です(この場合は 'addItem'関数となります)。 'concat'を使用すると、ソースが配列タプルのシーケンスではないので、表示されるvariadic-as-pairs形式の視差が追加されます。 – user2864740

0

あなたはこれを行うことができaddItemを変更したくない場合は、次の

[[4, "d"], [5, "e"]].forEach((params) => example.addItem.apply(example, params)) 
関連する問題