Деструктурировать массив в вызове функции

Скажем, у меня есть следующий массив:

const arr = ["var1", "var2", "var3"];

И у меня есть функция, которая принимает строки в качестве аргументов (но не массив строк):

func(var1, var2, var3)

Поэтому я попытался: func(...arr) и func(arr.map((elem) => elem)), но, очевидно, оба они возвращают массив, поэтому их нельзя передать функции. Единственный метод, который я знаю, - сначала назначить их:

const [var1, var2, var3] = ["var1", "var2", "var3"];

Но становится некрасиво, если в массиве больше переменных. Есть ли какой-нибудь метод, который мог бы достичь этого?

Я думаю, вам следует повторно попробовать оператор деструктурирования ...foo, так как он должен делать то, что вы просите. Вы получаете ошибку или что-то в этом роде?

S.V. 22.02.2023 08:56
func(...arr) - это должно работать. Не могли бы вы привести работающий пример?
Yousaf 22.02.2023 08:57

Я думаю, что func(...arr) должен работать.

Ahsan Jamal 22.02.2023 08:57

Какой браузер/версию вы используете? может быть старая версия, которая не реализует деструктурирование

Cid 22.02.2023 09:00

«но очевидно, что оба они возвращают массив» — Как вы это делаете? То, что они возвращают, зависит от того, что возвращает сам func.

Sebastian Simon 22.02.2023 09:02
func(...arr.map((elem) => elem + "hey")) тоже должно работать
cSharp 22.02.2023 09:02
func(...arr) действительно работает, и это на 100% на мне. Я мог ошибиться в ошибках и сразу подумал, что проблема была в ...arr. Спасибо вам всем!
noxi3534 22.02.2023 09:25
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
2
7
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Работает отлично

const arr = ["var1", "var2", "var3"];

func(...arr)

function func(var1, var2, var3) {
  console.info(var1, var2, var3)
}

Это действительно работает, я, должно быть, неправильно понял ошибки и подумал, что проблема в ...arr. Спасибо!

noxi3534 22.02.2023 09:24

Вы можете переопределить свою функцию и использовать аргументы в теле:

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

Другие вопросы по теме