В Javascript у нас часто есть данные, хранящиеся в виде массивов, и функции, которые мы хотим вызвать. Иногда данные в массивах — это именно те данные, которые мы хотим передать в функцию. К счастью, в Javascript есть способы использовать массивы в качестве входных значений для функций. Давайте рассмотрим, как использовать массивы в качестве параметров функций.
Как использовать массивы в качестве параметров функции
Когда у нас есть функция, в которую мы хотим передать массив, самый простой способ сделать это будет выглядеть следующим образом:
let numbers = [ 1, 2, 3 ]
let myFunction = (x, y, z) => {
return x + y + z;
}
// Returns 6
let getCalculation = myFunction(numbers[0], numbers[1], numbers[2]);
Конечно, это может быть довольно раздражающим, особенно при работе с функциями, которые имеют очень длинные списки свойств. Поэтому Javascript предоставляет нам два способа использования массивов в качестве параметров функций — apply()
и оператор spread.
Передача массивов в функции с помощью оператора spread
Современный и самый простой способ передать массив в функцию — это использовать оператор spread. Оператор spread (...
) просто добавляется перед массивом. Используя наш предыдущий пример, это выглядит следующим образом:
let numbers = [ 1, 2, 3 ]
let myFunction = (x, y, z) => {
return x + y + z;
}
// Returns 6
let getCalculation = myFunction(...numbers);
Мы также можем напрямую добавить массив в функцию, без использования переменной. Например:
let myFunction = (x, y, z) => {
return x + y + z;
}
// Returns 6
let getCalculation = myFunction(...[ 1, 2, 3 ]);
Если вы хотите узнать обо всех возможностях оператора spread, ознакомьтесь с моим руководством по этому вопросу здесь.
Передача массивов в функции с помощью apply()
Другой способ сделать это — использовать apply()
. Если вы не знакомы с основным вариантом использования apply()
, ознакомьтесь с моим полным руководством по этому объекту Javascript здесь.
В конечном итоге, apply()
позволяет нам взять функцию и передать в нее массив. Первый атрибут apply()
фактически ссылается на объект this
, который мы хотим использовать в функции. Второй аргумент — это массив всех параметров для этой функции. Это означает, что вы можете определить структуру this
, а также передать массив в саму функцию.
Это, очевидно, имеет некоторые специфические преимущества по сравнению с оператором spread (...
), поэтому он может быть более подходящим в зависимости от того, чего вы хотите достичь. Используя наш предыдущий пример, мы можем передать массив в нашу функцию следующим образом:
let myFunction = (x, y, z) => {
return x + y + z;
}
// Returns 6
let getCalculation = myFunction.apply({}, [ 1, 2, 3 ]);
Здесь я оставляю объект this
пустым, поэтому если бы мы использовали this
в myFunction
, это был бы пустой объект — именно это делает первый аргумент apply()
. Второй — это наш массив [1, 2, 3]
, ссылающийся на x
, y
и z
соответственно.