1. ホーム
  2. javascript

[解決済み] JavaScriptの関数に可変数の引数を送ることは可能ですか?

2022-04-16 18:14:10

質問

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をたくさん書いていますが、varargsを受け取ってそれを送信できるのは素晴らしいパターンです。例えば

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で配列を送信して、その配列を処理することは可能ですか? として 引数の配列は?

解決方法は?

更新情報 : ES6 からは、単純に 拡散構文 関数を呼び出すときに

func(...arr);

ES6では、引数を配列として扱うことを想定している場合もあるので、例えば、パラメータリストでspread構文を使うことも可能です。

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 が取るのは this の値を最初の引数として、関数呼び出し時に使用します。 null を使用すると、非制限的なコードで this の中のグローバルオブジェクト (ウィンドウ) を参照します。 func また、'use strict' を明示的に使用した場合や、ESモジュールでは、ストリクトモードで使用します。 null が使用されます。

また arguments オブジェクトは実際にはArrayではないので、次のように変換します。

var argsArray = Array.prototype.slice.call(arguments);

そしてES6では

const argsArray = [...arguments] // or Array.from(arguments)

しかし arguments オブジェクトを直接使用できるようになりました。