配列から JavaScript 関数に可変数の引数を送ることは可能ですか?
var arr = ['a','b','c']
var func = function()
{
// debug
alert(arguments.length);
//
for(arg in arguments)
alert(arg);
}
func('a','b','c','d'); // prints 4 which is what I want, then 'a','b','c','d'
func(arr); // prints 1, then 'Array'
最近Pythonをたくさん書いてきましたが、可変引数を受け入れて送信できるのは素晴らしいパターンです。例えば
def func(*args):
print len(args)
for i in args:
print i
func('a','b','c','d'); // prints 4 which is what I want, then 'a','b','c','d'
func(*arr) // prints 4 which is what I want, then 'a','b','c','d'
JavaScriptで配列を送信して処理することは可能ですか?として引数配列ですか?
ベストアンサー1
アップデート: ES6以降では、スプレッド構文関数を呼び出すとき:
func(...arr);
ES6 では、引数を配列として扱うことも想定されているため、パラメータ リストでスプレッド構文を使用することもできます。次に例を示します。
function func(...args) {
args.forEach(arg => console.log(arg))
}
const values = ['a', 'b', 'c']
func(...values)
func(1, 2, 3)
また、通常のパラメータと組み合わせることもできます。たとえば、最初の 2 つの引数を個別に受け取り、残りを配列として受け取りたい場合などです。
function func(first, second, ...theRest) {
//...
}
また、関数が期待する引数の数を知ることができるのは、おそらくあなたにとって有用でしょう:
var test = function (one, two, three) {};
test.length == 3;
しかし、いずれにしても、任意の数の引数を渡すことはできます...
スプレッド構文は、より短くて「簡潔」でありapply
、関数呼び出しで値を設定する必要がない場合はthis
、この方法が最適です。
こちらは適用するたとえば、これは以前のやり方です:
var arr = ['a','b','c'];
function func() {
console.log(this); // 'test'
console.log(arguments.length); // 3
for(var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
};
func.apply('test', arr);
apply
最近では、配列から任意の数の引数を渡す必要がある場合にのみ使用することをお勧めします。そして値を設定しますthis
。は最初の引数として値をapply
受け取り、関数呼び出し時に使用されます。 を非厳密なコードで使用する場合、キーワードは 内のグローバル オブジェクト (ウィンドウ) を参照し、厳密モードでは、 を明示的に 'use strict' を使用する場合、または ES モジュールではが使用されます。this
null
this
func
null
また、arguments
オブジェクトは実際には配列ではないので、次のように変換できます。
var argsArray = Array.prototype.slice.call(arguments);
ES6では次のようになります:
const argsArray = [...arguments] // or Array.from(arguments)
しかし、arguments
スプレッド構文のおかげで、最近ではオブジェクトを直接使用することはほとんどありません。