Можно ли отправить переменное количество аргументов в функцию JavaScript? - PullRequest
149 голосов
/ 24 декабря 2009

Можно ли отправить переменное число аргументов в функцию 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 отправить массив для обработки как массив аргументов?

Ответы [ 12 ]

0 голосов
/ 05 января 2019

Вы хотите, чтобы ваша функция реагировала на аргументы массива или переменные? Если последнее, попробуйте:

var func = function(...rest) {
  alert(rest.length);

  // In JS, don't use for..in with arrays
  // use for..of that consumes array's pre-defined iterator
  // or a more functional approach
  rest.forEach((v) => console.log(v));
};

Но если вы хотите обработать аргумент массива

var fn = function(arr) {
  alert(arr.length);

  for(var i of arr) {
    console.log(i);
  }
};
0 голосов
/ 29 мая 2017

Да, вы можете передать переменную №. аргументов для функции. Вы можете использовать apply для достижения этой цели.

например:.

var arr = ["Hi","How","are","you"];

function applyTest(){
    var arg = arguments.length;
    console.log(arg);
}

applyTest.apply(null,arr);
...