Скажем, у меня есть следующий массив:
const arr = ["var1", "var2", "var3"];
И у меня есть функция, которая принимает строки в качестве аргументов (но не массив строк):
func(var1, var2, var3)
Поэтому я попытался: func(...arr) и func(arr.map((elem) => elem)), но, очевидно, оба они возвращают массив, поэтому их нельзя передать функции. Единственный метод, который я знаю, - сначала назначить их:
const [var1, var2, var3] = ["var1", "var2", "var3"];
Но становится некрасиво, если в массиве больше переменных. Есть ли какой-нибудь метод, который мог бы достичь этого?
func(...arr)
- это должно работать. Не могли бы вы привести работающий пример?
Я думаю, что func(...arr) должен работать.
Какой браузер/версию вы используете? может быть старая версия, которая не реализует деструктурирование
«но очевидно, что оба они возвращают массив» — Как вы это делаете? То, что они возвращают, зависит от того, что возвращает сам func.
func(...arr.map((elem) => elem + "hey"))
тоже должно работать
func(...arr)
действительно работает, и это на 100% на мне. Я мог ошибиться в ошибках и сразу подумал, что проблема была в ...arr
. Спасибо вам всем!
Работает отлично
const arr = ["var1", "var2", "var3"];
func(...arr)
function func(var1, var2, var3) {
console.info(var1, var2, var3)
}
Это действительно работает, я, должно быть, неправильно понял ошибки и подумал, что проблема в ...arr. Спасибо!
Вы можете переопределить свою функцию и использовать аргументы в теле:
function foo() {
for (var i = 0; i < arguments.length; i++) {
// do stuff on your strings based on index -> arguments[i]
}
}
Теперь вы можете передавать столько параметров, сколько хотите. Вот простой пример:
function sum() {
var total = 0;
for (var i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
}
var numbers = [1,2,3]
console.info(sum(...numbers)) // will log 6
Я думаю, вам следует повторно попробовать оператор деструктурирования ...foo, так как он должен делать то, что вы просите. Вы получаете ошибку или что-то в этом роде?