¿Devolver múltiples valores en JavaScript?
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ías devolver una matriz que contenga tus valores:
function getValues() {
return [getFirstValue(), getSecondValue()]
}
Luego puedes acceder a ellos así:
const [first, second] = getValues()
Esto se llama asignación de desestructuración y es compatible con todos los principales entornos JS. Es equivalente a lo siguiente:
const values = getValues()
const first = values[0]
const second = values[1]
También puedes devolver un objeto si quieres asignar un nombre a cada valor:
function getValues() {
return {
first: getFirstValue(),
second: getSecondValue(),
}
}
Y para acceder a ellos:
const {first, second} = getValues()
Que es lo mismo que:
const values = getValues()
const first = values.first
const second = values.second
Se recomienda encarecidamente devolver un objeto en lugar de una matriz a menos que los valores tengan sentido como una tupla simple, por ejemplo, un par de coordenadas [x, y]
. Con una matriz, es fácil olvidar qué valor es cuál, es más difícil agregar más valores más adelante y es marginalmente más difícil escribir correctamente con TypeScript o JSDoc.
Puede hacer esto desde ECMAScript 6 en adelante usando matrices y "asignaciones de desestructuración" . Tenga en cuenta que estos no están disponibles en versiones anteriores de Javascript (es decir, ni en la tercera ni quinta edición de ECMAScript).
Le 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 la desestructuración de objetos combinada con la taquigrafía del valor de propiedad para nombrar los valores de retorno en un objeto y seleccionar los que desee:
let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3
Y, por cierto, no se deje engañar por el hecho de que ECMAScript le permite return 1, 2, ...
. Lo que realmente sucede allí no es lo que podría parecer. Una expresión en la declaración de retorno — 1, 2, 3
— no es más que un operador de coma aplicado a literales numéricos ( 1
, 2
y 3
) secuencialmente, que eventualmente se evalúa como el valor de su última expresión — 3
. Por eso return 1, 2, 3
es funcionalmente idéntico a nada más que return 3
.
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
Simplemente 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);