Преобразование массива в отдельные строки аргументов
Как мне передать этот массив в виде набора строк для функции? Этот код не работает, но я думаю, что это иллюстрирует то, что я пытаюсь сделать.
var strings = ['one','two','three'];
someFunction(strings.join("','")); // someFunction('one','two','three');
Спасибо!
Ответы
Ответ 1
Используйте apply()
.
var strings = ['one','two','three'];
someFunction.apply(null, strings); // someFunction('one','two','three');
Если ваша функция касается области объектов, передайте то, что вы хотите, чтобы this
был установлен как первый аргумент вместо null
.
Ответ 2
ES6
Для ES6 JavaScript вы можете использовать специальный оператор "деструктурирования":
var strings = ['one', 'two', 'three'];
someFunction(...strings);
ссылка: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator или http://www.2ality.com/2015/01/es6-destructuring.html
ES5 и старые
Для старого JavaScript вы можете:
var strings = ['one', 'two', 'three'];
someFunction.apply(this, strings);
Ответ 3
Решение довольно просто, каждая функция в JavaScript имеет связанный с ним метод, называемый "apply", который принимает аргументы, которые вы хотите передать в виде массива.
Итак:
var strings = ["one", "two", "three"];
someFunction.apply(this, strings);
'this' в приложении apply указывает область действия, если это просто функция на странице без объекта, затем установите ее в значение null, в противном случае передайте область, которую вы хотите, чтобы метод имел при вызове.
В свою очередь, внутри someFunction вы должны написать свой код примерно так:
function someFunction() {
var args = arguments; // the stuff that was passed in
for(var i = 0; i < args; ++i) {
var argument = args[i];
}
}