Дополнительно
Вернуть несколько значений в JavaScript?
Я пытаюсь вернуть два значения в JavaScript. Это возможно?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
754
19
Нет, но вы можете вернуть массив, содержащий ваши значения:
Тогда вы можете получить к ним доступ, как так:
С последним синтаксис ECMAScript 6 * вы также можете более интуитивно определить возвращаемое значение:
Если вы хотите поставить «метки» для каждого из возвращаемых значений (легче поддерживать), вы можете вернуть объект:
И чтобы получить к ним доступ
Или с синтаксисом ES6:
Вы можете сделать это с Javascript 1.7 и далее, используя «назначения для деструктуризации». Обратите внимание, что они недоступны в более старых версиях Javascript (то есть - ни с ECMAScript 3-го, ни 5-го издания).
Это позволяет назначать 1+ переменных одновременно:
Вы также можете использовать деструктурирование объекта в сочетании со значением свойства shorthand, чтобы назвать возвращаемые значения в объекте и выбрать те, которые вы хотите:
И, кстати, не обманывайтесь тем фактом, что ECMAScript позволяет вам
возвращать 1, 2, ...
. То, что действительно происходит, не то, что может показаться. Выражение в обратном выражении -1, 2, 3
- является не чем иным, как оператором запятой, применяемым к числовым литералам (1
,2
и3
) последовательно, который в конечном итоге оценивается как значение его последнего выражения -3
. Вот почему «возврат 1, 2, 3» функционально идентичен только «возврат 3».Просто верните объект буквально
С ES6 вы можете сделать это
Возвращаемое выражение
{dCodes, dCodes2}
является значением свойства shorthand и эквивалентно этому{dCodes: dCodes, dCodes2: dCodes2}
.Это назначение в последней строке называется заданием уничтожения объекта . Он извлекает значение свойства объекта и назначает его переменной с тем же именем. Если вы хотите назначить возвращаемые значения переменным другого имени, вы можете сделать это следующим образом:
let {dCodes: x, dCodes2: y} = newCodes ()
Ecmascript 6 включает в себя «назначения для деструктуризации» (как упомянуто в kangax), поэтому во всех браузерах (не только в Firefox) вы сможете захватывать массив значений без необходимости создавать именованный массив или объект с единственной целью их захвата.
Вы можете попробовать это уже в Firefox!
Еще один синтаксис, который стоит упомянуть недавно введенным (ES6), - это использование стенографии создания объектов в дополнение к деструктурирующему присвоению.
Этот синтаксис может быть поли заполнен babel или другим полифиллером js для старых браузеров, но, к счастью, теперь он изначально работает с последними версиями Chrome и Firefox.
Но при создании нового объекта здесь задействовано распределение памяти (и возможная загрузка gc), и вы не ожидаете от него большой производительности. В любом случае JavaScript не является лучшим языком для разработки высокооптимальных вещей, но если это необходимо, вы можете рассмотреть возможность размещения вашего результата на окружающем объекте или на таких методах, которые обычно являются общими приемами производительности между JavaScript, Java и другими языками.
Лучший способ для этого
Тогда используйте
возврат 4
в ES6 вы можете использовать этот код
Помимо возврата массива или объекта, как рекомендовали другие, вы также можете использовать функцию коллектора (аналогичную той, которая найдена в The Little Schemer ):
Я сделал тест jsperf, чтобы увидеть, какой из трех методов быстрее. Массив самый быстрый и коллекционер самый медленный.
http://jsperf.com/returning-multiple-values-2
В JS мы можем легко вернуть кортеж с массивом или объектом, но не забываем! = > JS - это язык, ориентированный на «обратный вызов», и здесь есть небольшой секрет для «возвращения нескольких значений», о которых еще никто не упомянул, попробуйте это:
становится
:)
бац! Это просто еще один способ решения вашей проблемы.
Вы также можете сделать:
Вы можете использовать «Объект»
Все правильно.
return
логически обрабатывает слева направо и возвращает последнее значение.Я бы предложил использовать последнее назначение по деструктуризации (Но убедитесь, что оно поддерживается в вашей среде)
Очень распространенный способ вернуть несколько значений в javascript - это использовать object literals , что-то вроде:
и получить такие значения:
или даже короче:
и получить их индивидуально, как:
Я знаю два способа сделать это:
Вот пример, который я нашел:
Я ничего не добавляю здесь нового, кроме другого альтернативного способа.
Добавление недостающих важных частей, чтобы сделать этот вопрос полным ресурсом, так как это появляется в результатах поиска.
Объект деструктуризации
В деструктуризации объектов вам не обязательно использовать то же значение ключа, что и имя вашей переменной, вы можете назначить другое имя переменной, определив его как показано ниже:
Разрушение массива
В деструктуризации массива вы можете пропустить значения, которые вам не нужны.
Стоит отметить это
...rest
всегда должен быть в конце, так как нет никакого смысла разрушать что-либо после того, как все остальное агрегируется вrest
.Я надеюсь, что это добавит некоторую ценность этому вопросу :)
Несколько дней назад у меня было аналогичное требование - получать несколько возвращаемых значений от функции, которую я создал.
Из многих возвращаемых значений мне нужно было вернуть только определенное значение для данного условия, а затем другое возвращаемое значение, соответствующее другому условию.
Вот пример того, как я это сделал:
Функция:
Получение необходимого возвращаемого значения от объекта, возвращаемого функцией:
Весь смысл ответа на этот вопрос состоит в том, чтобы поделиться этим подходом получения даты в хорошем формате. Надеюсь, это помогло тебе :)
Ну, мы не можем точно делать то, что вы пытаетесь. Но что-то, вероятно, ниже, может быть сделано.
Затем при вызове метода