valores retornar multiple ejemplo javascript

retornar - ¿Devolver múltiples valores en JavaScript?



return jquery function (15)

Estoy tratando de devolver dos valores en JavaScript. ¿Es eso posible?

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


Además de devolver una matriz o un objeto como otros han recomendado, también puede usar una función de recopilador (similar a la que se encuentra en The Little Schemer ):

function a(collector){ collector(12,13); } var x,y; a(function(a,b){ x=a; y=b; });

Hice una prueba jsperf para ver cuál de los tres métodos es más rápido. La matriz es la más rápida y el colector es el más lento.

http://jsperf.com/returning-multiple-values-2


Desde ES6 puedes hacer esto

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

La expresión de retorno {dCodes, dCodes2} es un valor de propiedad abreviado y es equivalente a este {dCodes: dCodes, dCodes2: dCodes2} .

Esta asignación en la última línea se llama asignación de destrucción de objetos . Extrae el valor de propiedad de un objeto y lo asigna a una variable del mismo nombre. Si desea asignar valores de retorno a variables de diferente nombre, puede hacerlo de esta manera let {dCodes: x, dCodes2: y} = newCodes()


Ecmascript 6 incluye "asignaciones de desestructuración" (como mencionó Kangax), por lo que en todos los navegadores (no solo en Firefox) podrá capturar una matriz de valores sin tener que crear una matriz u objeto con el único propósito de capturarlos.

//so to capture from this function function myfunction() { var n=0;var s=1;var w=2;var e=3; return [n,s,w,e]; } //instead of having to make a named array or object like this var IexistJusttoCapture = new Array(); IexistJusttoCapture = myfunction(); north=IexistJusttoCapture[0]; south=IexistJusttoCapture[1]; west=IexistJusttoCapture[2]; east=IexistJusttoCapture[3]; //you''ll be able to just do this [north, south, west, east] = myfunction();

¡Ya puedes probarlo en Firefox!


En JS, podemos devolver fácilmente una tupla con una matriz u objeto, ¡pero no lo olvide! => JS es un lenguaje orientado a la callback , y hay un pequeño secreto aquí para "devolver múltiples valores" que nadie ha mencionado, intente esto:

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

se convierte en

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

:)

bam Esta es simplemente otra forma de resolver su problema.


Hace unos días tuve el requisito similar de obtener múltiples valores de retorno de una función que creé.

De muchos valores de retorno, lo necesitaba para devolver solo un valor específico para una condición dada y luego otro valor de retorno correspondiente a otra condición.

Aquí está el ejemplo de cómo hice eso:

Función:

function myTodayDate(){ var today = new Date(); var day = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]; var month = ["January","February","March","April","May","June","July","August","September","October","November","December"]; var myTodayObj = { myDate : today.getDate(), myDay : day[today.getDay()], myMonth : month[today.getMonth()], year : today.getFullYear() } return myTodayObj; }

Obtención del valor de retorno requerido del objeto devuelto por la función:

var todayDate = myTodayDate().myDate; var todayDay = myTodayDate().myDay; var todayMonth = myTodayDate().myMonth; var todayYear = myTodayDate().year;

El punto central de responder esta pregunta es compartir este enfoque de obtener la fecha en buen formato. Espero que te haya ayudado :)


La mejor idea es hacer una matriz que contenga los valores en lugar de un objeto. Los objetos ocupan más espacio y son más difíciles de manejar que los arreglos. Si no usa objetos en su programa, entonces si usa un objeto, invocará e importará innecesariamente el módulo Objeto a su programa, haciéndolo más lento.


La mejor manera para esto es

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

Entonces use

a().f

retorno 4

en ES6 puedes usar este código

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


No, pero podría devolver una matriz que contenga sus valores:

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

Entonces puedes acceder a ellos así:

var codes = newCodes(); var dCodes = codes[0]; var dCodes2 = codes[1];

Si desea poner "etiquetas" en cada uno de los valores devueltos (más fácil de mantener), puede devolver un objeto:

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

Y para acceder a ellos:

var codes = newCodes(); var dCodes = codes.dCodes; var dCodes2 = codes.dCodes2;


Otro valor para mencionar la sintaxis recientemente introducida (ES6) es el uso de la taquigrafía de creación de objetos, además de la asignación destructiva.

function fun1() { var x = ''a''; var y = ''b''; return { x, y, z: ''c'' }; // literally means { x: x, y: y, z: ''c'' }; } var { z, x, y } = fun1(); // order or full presence is not really important // literally means var r = fun1(), x = r.x, y = r.y, z = r.z; console.log(x, y, z);

Esta sintaxis puede rellenarse con babel u otro js polyfiller para navegadores más antiguos, pero afortunadamente ahora funciona de forma nativa con las versiones recientes de Chrome y Firefox.

Pero al hacer un nuevo objeto, la asignación de memoria (y la eventual carga de gc) están involucradas aquí, no esperes mucho rendimiento de ello. De todos modos, JavaScript no es el mejor lenguaje para desarrollar cosas altamente óptimas, pero si es necesario, puedes considerar poner el resultado en el objeto que lo rodea o en técnicas que suelen ser trucos comunes de rendimiento entre JavaScript, Java y otros idiomas.


Puede hacer esto desde Javascript 1.7 en adelante usando "desestructurando asignaciones" . Tenga en cuenta que estos no están disponibles en versiones anteriores de Javascript (es decir, ni con ECMAScript 3rd ni 5th editions).

Te 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 usar la 2ality.com/2014/06/es6-multiple-return-values.html para nombrar los valores devueltos en un objeto y seleccionar los que desea:

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 ) de forma secuencial, que eventualmente se evalúa al valor de su última expresión ( 3 . Es por eso que return 1, 2, 3 es funcionalmente idéntico a nada más, pero return 3 .

return 1, 2, 3; // becomes return 2, 3; // becomes return 3;


Puedes usar "Objeto"

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


Solo 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);


Sugeriría usar la última asignación de desestructuración (pero asegúrese de que sea compatible con su entorno )

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


También puedes hacer:

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


Todo es correcto. return procesos lógicamente de izquierda a derecha y devuelve el último valor.

function foo(){ return 1,2,3; } >> foo() >> 3