Подтвердить что ты не робот

Передайте все значения из массива в функцию как параметры

У меня есть массив значений:

['a', 'b', 'c', 'd']

и мне нужно передать их как параметры в функцию:

window.myFunction('a', 'b', 'c', 'd');

Это было бы проще, если бы я мог просто передать массив/объект в функцию, но функции написаны другими людьми или уже существуют, и я не могу их изменить - их нужно передавать как индивидуальные параметры, что и есть то, что я нужно решить.

Количество передаваемых значений несовместимо. Это может быть один, может быть 100.

Опять же, я не могу повлиять на функции. Они такие, как они есть, и я всегда получаю массив значений, чтобы пройти в них.

4b9b3361

Ответ 1

Используйте метод .apply объекта Function.

window.myFunction.apply(window, ['a','b','c','d']);

Метод .apply вызывает вызываемую вами функцию, но позволяет установить значение функции this (первый аргумент) и позволяет устанавливать его аргументы с использованием массива (второй аргумент).

Итак, мы сохранили window как значение this, и мы передаем массив как отдельные аргументы. Члены массива будут распределены так, как если бы они были переданы как отдельные аргументы, так что, если бы вы это сделали:

window.myFunction('a','b','c','d');

Ответ 2

Try

window.myFunction.apply(window, ['a', 'b', 'c', 'd']);

Ответ 3

Array.prototype.map()

var arr = ['a','b','c'];

function echo(x){ 
  console.log(x)
}

function go(){
  arr.map(echo);
}
<button onclick="go()">Test</button>

Ответ 4

В ES6 вы можете использовать синтаксис распространения.

Как от Docs:

Синтаксис спредов позволяет разворачивать итерацию, такую ​​как выражение или строку массива, в местах, где ожидаются нулевые или более аргументы (для вызовов функций) или элементы (для литералов массива), или выражение объекта, которое должно быть расширено в местах, где нулевые или более пары ключей-значений (для объектных литералов).

Ваш синтаксис будет выглядеть следующим образом:

var array = ['a', 'b', 'c', 'd'];
myFunction(...array);

Demo:

var array = ['a', 'b', 'c', 'd'];
myFunction(...array);

function myFunction(p1, p2, p3, p4) {
  console.log(p1, p2, p3, p4);
}