Ys' Library | プログラミング・ガジェット徒然日記
JavaScriptやHTML、その他プログラミングの中で詰まったこととその解決法、またはガジェットについて書くブログです。
2013年2月10日日曜日
[JavaScript]任意の数の引数を受け取り処理を行う
JavaScriptの関数は定義されていない引数も受け取ることができる。 全ての引数は`arguments`という配列からアクセスできる。 var doSomething = function(verb, something) { console.log(verb + ' ' + something); } doSomething('write', 'foo'); //...1 //output: write foo doSomething('write', 'foo', 'bar'); //...2 //output: write foo //実際に処理できるのは'write', 'foo'のみだが、'bar'も引数として受け取っている 上記の`doSomething`という関数は、通常は1つめの例のように、引数を一つだけ受け取ることを想定されている。 この関数を、例2のように3つ以上の引数が渡された時、'write foo, bar'と表示できるように改良する。 var doSomething = function() { var verb = arguments[0], somethings = 2 <= arguments.length ? [].slice.call(arguments, 1) : []; console.log(verb + ' ' + somethings.toString()); } doSomething('write', 'foo', 'bar') //output: write foo,bar doSomething('write', 'foo', 'bar', 'hoge') //output: write foo,bar,hoge こんな感じ。 重要なのは、 somethings = 2 >= arguments.length ? [].slice.call(arguments, 1) : []; この部分。 配列`arguments`の長さが2以上の時(つまり2つ目以降の引数が渡されている時)、配列`arguments`の2つめ以降の要素を切り出して`somethings`に詰めている。 この処理によって、`somethings`は2つめ以降の引数が入った配列になっている(2つめ以降の引数がない場合は空の配列)。 あとはこの`somethings`内の各要素に対して処理を加えていけばいい。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿