12

Возврат нескольких значений в JavaScript?

9

Я пытаюсь вернуть два значения в JavaScript. Это возможно?

var newCodes = function() {  
    var dCodes = fg.codecsCodes.rs;
    var dCodes2 = fg.codecsCodes2.rs;
    return dCodes, dCodes2;
};

В приведенном примере кода я использую запятую для возврата двух значений, но это, похоже, не работает так, как я надеялся. Как правильно вернуть оба значения из функции?

5 ответ(ов)

0

В ответ на ваш вопрос, вы можете просто вернуть объектный литерал в вашем коде. Вот пример, как это можно сделать:

function newCodes() {
    var dCodes = fg.codecsCodes.rs; // Связанные ICD
    var dCodes2 = fg.codecsCodes2.rs; // Связанные CPT
    return { dCodes, dCodes2 };  
}

var result = newCodes();
alert(result.dCodes);
alert(result.dCodes2);

В этом примере функция newCodes возвращает объект, содержащий свойства dCodes и dCodes2. Вы можете получить доступ к этим свойствам, как показано в последующих строках, с помощью объекта result.

0

С тех пор как в JavaScript был введён стандарт ES6, вы можете использовать следующий синтаксис:

let newCodes = function() {  
    const dCodes = fg.codecsCodes.rs
    const dCodes2 = fg.codecsCodes2.rs
    return {dCodes, dCodes2}
};

let {dCodes, dCodes2} = newCodes()

Выражение возврата {dCodes, dCodes2} является сокращением для значений свойств и эквивалентно {dCodes: dCodes, dCodes2: dCodes2}.

Присвоение на последней строке называется деструктурирующим присваиванием объектов. Оно позволяет извлекать значения свойств объекта и присваивать их переменным с теми же именами. Если вы хотите присвоить возвращаемые значения переменным с другими именами, вы можете сделать это так: let {dCodes: x, dCodes2: y} = newCodes().

Таким образом, x будет иметь значение свойства dCodes, а y — значение свойства dCodes2.

0

Ecmascript 6 включает в себя "деструктуризацию" (как упомянул kangax), что позволяет вам извлекать значения из массива без необходимости создавать именованный массив или объект только для этой цели.

Вот пример:

// Для захвата значений из этой функции
function myfunction() {
    var n = 0; 
    var s = 1; 
    var w = 2; 
    var e = 3;
    return [n, s, w, e];
}

// Вместо необходимости создавать именованный массив или объект, например так
var IexistJusttoCapture = new Array();
IexistJusttoCapture = myfunction();
north = IexistJusttoCapture[0];
south = IexistJusttoCapture[1];
west = IexistJusttoCapture[2];
east = IexistJusttoCapture[3];

// Вы сможете сделать это
[north, south, west, east] = myfunction(); 

Вы можете попробовать это уже в Firefox! Теперь вы можете легко извлекать значения напрямую, что упрощает код и делает его более читаемым.

0

Новый синтаксис, введенный в ES6, который стоит упомянуть, — это использование сокращенного синтаксиса для создания объектов в дополнение к деструктурирующему присваиванию.

function fun1() {
  var x = 'a';
  var y = 'b';
  return { x, y, z: 'c' };
  // по сути это то же самое, что и { x: x, y: y, z: 'c' };
}

var { z, x, y } = fun1(); // порядок или полное присутствие не столь важны
// фактически это эквивалентно var r = fun1(), x = r.x, y = r.y, z = r.z;
console.log(x, y, z);

Этот синтаксис можно использовать в старых браузерах с помощью полифилов, таких как Babel, но, к счастью, он уже работает нативно в последних версиях Chrome и Firefox.

Однако имейте в виду, что при создании нового объекта здесь происходит выделение памяти (а также возможная нагрузка на сборщик мусора), поэтому не стоит ожидать высокой производительности от этого метода. В общем, JavaScript не является лучшим языком для разработки высоко оптимизированных решений, но если это необходимо, можно рассмотреть возможность размещения результата в окружающем объекте или использование других техник, которые обычно распространены как трюки для повышения производительности в JavaScript, Java и других языках.

0

В вашем коде вы использовали два различных способа объявления объекта с использованием идентификаторов. Давайте разберем и переведем это на русский язык в стиле ответа на StackOverflow.

В первом варианте функции a() вы создаете переменные d, c, и f, а затем возвращаете объект, где свойства явно указаны:

function a(){
  var d = 2;
  var c = 3;
  var f = 4;
  return {d: d, c: c, f: f};
}

Здесь мы создаем объект с помощью синтаксиса d: d, который задает свойству d значение переменной d. То же самое происходит и с c и f.

Затем вы можете деструктурировать этот объект, чтобы получить значения переменных:

const {d, c, f} = a();

Во втором варианте кода можно упростить синтаксис возвращаемого объекта, просто указав переменные без явного указания имен свойств, так как они совпадают с названиями переменных:

function a(){
  var d = 2;
  var c = 3;
  var f = 4;
  return {d, c, f}; // Здесь можно опустить повторы
}

Этот способ более лаконичный и читабельный, так как вы избавляетесь от повторения имен переменных. На выходе вы получаете тот же самый результат, и деструктуризация по-прежнему работает так же:

const {d, c, f} = a();

Таким образом, новый синтаксис является более современным и предпочтительным с точки зрения удобства и чистоты кода.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь