Я пытаюсь вернуть два значения в JavaScript . Это возможно?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
javascript
return
multiple-variable-return
Асим Заиди
источник
источник
Ответы:
Нет, но вы можете вернуть массив, содержащий ваши значения:
Тогда вы можете получить к ним доступ так:
С последним синтаксисом ECMAScript 6 * вы также можете интуитивно деструктурировать возвращаемое значение:
Если вы хотите поместить «метки» в каждое возвращаемое значение (проще в обслуживании), вы можете вернуть объект:
И чтобы получить к ним доступ:
Или с синтаксисом ES6:
* См. Эту таблицу для совместимости браузера. По сути, все современные браузеры, кроме IE, поддерживают этот синтаксис, но вы можете скомпилировать код ES6 до IE-совместимого JavaScript во время сборки с помощью таких инструментов, как Babel .
источник
return {dCodes : dCodes, dCodes2 : dCodes2};
чтобы было легче ссылаться.const { dCodes, dCodes2 } = newCodes();
return {dCodes, dCodes2}
работает так же, как упомянутое @Intelekshual, и (2) используя ту же функцию, к которой вы можете просто обращаться с помощью массивов деструктурирования[dCodes, dCodes2] = newCodes()
или (3) объектов({dCodes, dCodes2} = newCodes())
(нет необходимости использовать объявление там @Taylor Правда, этоvar
было бы более подходящим для текущего примера Саши).Вы можете сделать это начиная с Javascript 1.7 и далее, используя «деструктурирующие назначения» . Обратите внимание, что они недоступны в более старых версиях Javascript (т.е. ни в ECMAScript 3-й, ни в 5-й редакции).
Позволяет одновременно назначать 1+ переменных:
Вы также можете использовать деструктуризацию объекта в сочетании с сокращением значения свойства, чтобы назвать возвращаемые значения в объекте и выбрать те, которые вам нужны:
И, между прочим, не обманывайте себя тем фактом, что ECMAScript позволяет вам
return 1, 2, ...
. То, что действительно происходит там, не то, что может показаться. Выражение в обратном заявлении -1, 2, 3
- не что иное , как оператор запятой применяется к числовым литералам (1
,2
и3
) последовательно, которые в конечном итоге определяет значение его последнего выражение -3
. Вот почемуreturn 1, 2, 3
функционально идентичен не более, чемreturn 3
.источник
function foo(){return 1,2,3;}
выполненияconsole.log([].push(foo()))
распечатывается 1.Просто верните объектный литерал
источник
С ES6 вы можете сделать это
Возвращаемое выражение
{dCodes, dCodes2}
является сокращением значения свойства и эквивалентно этому{dCodes: dCodes, dCodes2: dCodes2}
.Это назначение в последней строке называется разрушающим назначение объекта . Он извлекает значение свойства объекта и присваивает его переменной с тем же именем. Если вы хотите присвоить возвращаемые значения переменным с другим именем, вы можете сделать это следующим образом
let {dCodes: x, dCodes2: y} = newCodes()
источник
Ecmascript 6 включает в себя «деструктурирующие назначения» (как упоминалось в kangax), поэтому во всех браузерах (не только в Firefox) вы сможете захватывать массив значений без необходимости создавать именованный массив или объект с единственной целью их захвата.
Вы можете попробовать это в Firefox уже!
источник
Еще один заслуживающий упоминания недавно введенный (ES6) синтаксис - это использование сокращений создания объектов в дополнение к разрушающему присваиванию.
Этот синтаксис может быть заполнен с помощью babel или другого js polyfiller для старых браузеров, но, к счастью, теперь он работает с последними версиями Chrome и Firefox.
Но поскольку создание нового объекта связано с выделением памяти (и возможной загрузкой gc), не ожидайте от него большой производительности. JavaScript не лучший язык для разработки в высшей степени оптимальных вещей в любом случае, но если это необходимо, вы можете рассмотреть возможность размещения своего результата на окружающем объекте или таких методах, которые обычно являются обычными приемами повышения производительности между JavaScript, Java и другими языками.
источник
Лучший способ для этого
Тогда используйте
возврат 4
в ES6 вы можете использовать этот код
источник
Кроме возврата массива или объекта, как рекомендовали другие, вы также можете использовать функцию сборщика (аналогичную той, что была найдена в «Маленьком интрижке» ):
Я сделал тест jsperf, чтобы увидеть, какой из трех методов быстрее. Массив самый быстрый, а коллектор самый медленный.
http://jsperf.com/returning-multiple-values-2
источник
collector
называетсяcontinuation
и техника называется CPSВ JS мы можем легко вернуть кортеж с массивом или объектом, но не забывайте! => JS - это
callback
ориентированный язык, и здесь есть небольшой секрет для «возврата нескольких значений», о котором еще никто не упоминал, попробуйте это:становится
:)
бам! Это просто еще один способ решения вашей проблемы.
источник
Добавление недостающих важных частей, чтобы сделать этот вопрос полным ресурсом, как это появляется в результатах поиска.
Уничтожение объектов
При деструктурировании объекта вам не обязательно использовать то же значение ключа, что и у имени вашей переменной, вы можете назначить другое имя переменной, определив его, как показано ниже:
Деструктурирование массива
При деструктуризации массива вы можете пропустить ненужные значения.
Стоит отметить, что это
...rest
всегда должно быть в конце, так как не имеет никакого смысла разрушать что-либо после того, как все остальное агрегируетсяrest
.Я надеюсь, что это добавит ценность этому вопросу :)
источник
Вы также можете сделать:
источник
Очень распространенный способ вернуть несколько значений в javascript - это использование литералов объекта , что-то вроде:
и получите такие значения:
или даже более короткий путь:
и получить их индивидуально, как:
источник
Вы можете использовать «Объект»
источник
Все правильно.
return
логически обрабатывает слева направо и возвращает последнее значение.источник
,
является оператором и может быть использован в любом выражении. Здесь нет ничего особенногоreturn
.Я бы предложил использовать последнее задание по деструктуризации (но убедитесь, что оно поддерживается в вашей среде )
источник
Я знаю два способа сделать это: 1. Вернуться как массив 2. Вернуться как объект
Вот пример, который я нашел:
источник
Несколько дней назад у меня было похожее требование получения нескольких возвращаемых значений из функции, которую я создал.
Из многих возвращаемых значений мне нужно было вернуть только определенное значение для данного условия, а затем другое возвращаемое значение, соответствующее другому условию.
Вот пример того, как я это сделал:
Функция:
Получение Required возвращаемого значения из объекта, возвращаемого функцией:
Весь смысл ответа на этот вопрос состоит в том, чтобы поделиться этим подходом получения даты в хорошем формате. Надеюсь, это помогло вам :)
источник
Я ничего не добавляю здесь, но другой альтернативный способ.
источник
Ну, мы не можем точно сделать то, что вы пытаетесь. Но что-то, вероятно, ниже может быть сделано.
Потом при вызове метода
источник