¿Devolver múltiples valores en JavaScript?

Resuelto Asim Zaidi asked hace 14 años • 20 respuestas

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;
};
Asim Zaidi avatar May 27 '10 05:05 Asim Zaidi
Aceptado

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.

Sasha Chedygov avatar May 26 '2010 22:05 Sasha Chedygov

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, 2y 3) secuencialmente, que eventualmente se evalúa como el valor de su última expresión — 3. Por eso return 1, 2, 3es funcionalmente idéntico a nada más que return 3.

return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
kangax avatar May 26 '2010 23:05 kangax

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);
Sean Kinsey avatar May 26 '2010 22:05 Sean Kinsey