Estoy intentando devolver dos valores en JavaScript. ¿Es posible?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
No, pero podría devolver un array que contenga sus valores:
function getValues() {
return [getFirstValue(), getSecondValue()];
}
Entonces puedes acceder a ellos así:
var values = getValues();
var first = values[0];
var second = values[1];
Con la última sintaxis de ECMAScript 6*, también puedes desestructurar el valor de retorno de forma más intuitiva:
const [first, second] = getValues();
Si quieres poner "etiquetas" a cada uno de los valores devueltos (más fácil de mantener), puedes devolver un objeto:
function getValues() {
return {
first: getFirstValue(),
second: getSecondValue(),
};
}
Y para acceder a ellos
var values = getValues();
var first = values.first;
var second = values.second;
O con la sintaxis de ES6:
const {first, second} = getValues();
* Ver esta tabla para la compatibilidad del navegador. Básicamente, todos los navegadores modernos, aparte de IE, soportan esta sintaxis, pero se puede compilar el código ES6 a JavaScript compatible con IE en tiempo de construcción con herramientas como Babel.
Puede hacerlo a partir de Javascript 1.7 utilizando "destructuring assignments". Tenga en cuenta que éstas no están disponibles en las versiones más antiguas de Javascript (es decir, ni con la 3ª ni con la 5ª edición de ECMAScript).
Permite asignar a 1+ variables simultáneamente:
var [x, y] = [1, 2];
x; // 1
y; // 2
// or
[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4
También puede utilizar desestructuración de objetos combinada con la abreviatura de valores de propiedades para nombrar los valores de retorno de un objeto y elegir los que desee:
let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3
Y por cierto, no te dejes engañar por el hecho de que ECMAScript te permita devolver 1, 2, ...
. Lo que realmente ocurre ahí no es lo que podría parecer. Una expresión en la sentencia return - 1, 2, 3
- no es más que un operador coma aplicado a literales numéricos (1
, 2
, y 3
) secuencialmente, que finalmente se evalúa al valor de su última expresión - 3
. Por eso, devolver 1, 2, 3
es funcionalmente idéntico a nada más que devolver 3
.
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
Sólo devuelve un objeto literal
function newCodes(){
var dCodes = fg.codecsCodes.rs; // Linked ICDs
var dCodes2 = fg.codecsCodes2.rs; //Linked CPTs
return {
dCodes: dCodes,
dCodes2: dCodes2
};
}
var result = newCodes();
alert(result.dCodes);
alert(result.dCodes2);