Estoy tratando de devolver dos valores en JavaScript . es posible?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
javascript
return
multiple-variable-return
Asim Zaidi
fuente
fuente
Respuestas:
No, pero podría devolver una matriz que contenga sus valores:
Entonces puedes acceder a ellos de esta manera:
Con la última sintaxis ECMAScript 6 *, también puede desestructurar el valor de retorno de forma más intuitiva:
Si desea poner "etiquetas" en cada uno de los valores devueltos (más fácil de mantener), puede devolver un objeto:
Y para acceder a ellos:
O con la sintaxis de ES6:
* Consulte esta tabla para ver la compatibilidad del navegador. Básicamente, todos los navegadores modernos aparte de IE admiten esta sintaxis, pero puede compilar el código ES6 a JavaScript compatible con IE en el momento de la compilación con herramientas como Babel .
fuente
return {dCodes : dCodes, dCodes2 : dCodes2};
para que sea más fácil hacer referencia.const { dCodes, dCodes2 } = newCodes();
return {dCodes, dCodes2}
funciona igual que @Intelekshual mencionado y (2) usando la misma función, simplemente puede acceder a ellos con matrices de desestructuración[dCodes, dCodes2] = newCodes()
u (3) objetos({dCodes, dCodes2} = newCodes())
(no es necesario usar una declaración allí @Taylor , aunquevar
sería más apropiado para el ejemplo actual de Sasha).Puede hacer esto desde Javascript 1.7 en adelante usando "tareas de desestructuración" . Tenga en cuenta que estos no están disponibles en versiones anteriores de Javascript (es decir, ni con ECMAScript 3ª ni 5ª edición).
Le permite asignar a 1+ variables simultáneamente:
También puede usar la desestructuración de objetos combinada con el valor de la propiedad de forma abreviada para nombrar los valores de retorno en un objeto y elegir los que desee:
Y, por cierto, no se deje engañar por el hecho de que ECMAScript se lo permite
return 1, 2, ...
. Lo que realmente sucede allí no es lo que podría parecer. Una expresión en la instrucción de retorno -1, 2, 3
- no es más que un operador coma aplica a los literales numéricos (1
,2
y3
) de manera secuencial, lo que finalmente da como resultado el valor de su última expresión -3
. Por esoreturn 1, 2, 3
es funcionalmente idéntico a nada más quereturn 3
.fuente
function foo(){return 1,2,3;}
hacer una copiaconsole.log([].push(foo()))
impresa 1.Solo devuelve un objeto literal
fuente
Desde ES6 puedes hacer esto
La expresión de retorno
{dCodes, dCodes2}
es un valor de propiedad abreviado y es equivalente a esto{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 la variable del mismo nombre. Si desea asignar valores de retorno a variables de diferente nombre, puede hacerlo así
let {dCodes: x, dCodes2: y} = newCodes()
fuente
Ecmascript 6 incluye "tareas de desestructuración" (como mencionó kangax), por lo que en todos los navegadores (no solo Firefox) podrá capturar una matriz de valores sin tener que crear una matriz u objeto con el único propósito de capturarlos.
¡Ya puedes probarlo en Firefox!
fuente
Otra digna de mencionar la sintaxis recién introducida (ES6) es el uso de la taquigrafía de creación de objetos además de la asignación de destrucción.
Esta sintaxis se puede rellenar con babel u otro polyfiller js para navegadores antiguos, pero afortunadamente ahora funciona de forma nativa con las versiones recientes de Chrome y Firefox.
Pero como hacer un nuevo objeto, la asignación de memoria (y la eventual carga gc) están involucrados aquí, no esperes mucho rendimiento de él. De todos modos, JavaScript no es el mejor lenguaje para desarrollar cosas altamente óptimas, pero si es necesario, puede considerar colocar su resultado en un objeto circundante o en esas técnicas, que generalmente son trucos de rendimiento comunes entre JavaScript, Java y otros lenguajes.
fuente
La mejor manera para esto es
Luego usa
retorno 4
en ES6 puedes usar este código
fuente
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 ):
Hice una prueba jsperf para ver cuál de los tres métodos es más rápido. La matriz es más rápida y el recolector es el más lento.
http://jsperf.com/returning-multiple-values-2
fuente
collector
lo general, se llamacontinuation
y la técnica se llama CPSEn JS, podemos devolver fácilmente una tupla con una matriz u objeto, ¡pero no lo olvide! => JS es un
callback
lenguaje orientado, y aquí hay un pequeño secreto para "devolver múltiples valores" que nadie ha mencionado aún, intente esto:se convierte
:)
bam! Esta es simplemente otra forma de resolver su problema.
fuente
Agregar las partes importantes que faltan para hacer de esta pregunta un recurso completo, ya que esto aparece en los resultados de búsqueda.
Desestructuración de objetos
En la desestructuración de objetos, no necesariamente necesita usar el mismo valor clave que su nombre de variable, puede asignar un nombre de variable diferente definiéndolo de la siguiente manera:
Desestructuración de matrices
En la desestructuración de matrices, puede omitir los valores que no necesita.
Vale la pena notar que
...rest
siempre debe estar al final, ya que no tiene sentido destruir nada después de que todo lo demás se agregue arest
.Espero que esto agregue algo de valor a esta pregunta :)
fuente
También puedes hacer:
fuente
Una forma muy común de devolver múltiples valores en javascript es usar un objeto literal , por lo que algo como:
y obtener los valores como este:
o incluso un camino más corto:
y obtenerlos individualmente como:
fuente
Puedes usar "Objeto"
fuente
Todo esta correcto.
return
procesa lógicamente de izquierda a derecha y devuelve el último valor.fuente
,
es un operador y se puede utilizar en cualquier expresión. No hay nada especialreturn
aquí.Sugeriría utilizar la última asignación de desestructuración (pero asegúrese de que sea compatible con su entorno )
fuente
Conozco dos formas de hacer esto: 1. Volver como matriz 2. Volver como objeto
Aquí hay un ejemplo que encontré:
fuente
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:
Obteniendo el valor de retorno requerido del objeto devuelto por la función:
El objetivo de responder a esta pregunta es compartir este enfoque de obtener la fecha en buen formato. Espero que te haya ayudado :)
fuente
No agrego nada nuevo aquí, sino otra forma alternativa.
fuente
Bueno, no podemos hacer exactamente lo que estás intentando. Pero es probable que se pueda hacer algo a continuación.
Luego, al llamar al método
fuente