Estou tentando retornar dois valores em JavaScript . Isso é possível?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
javascript
return
multiple-variable-return
Asim Zaidi
fonte
fonte
Respostas:
Não, mas você pode retornar uma matriz contendo seus valores:
Então você pode acessá-los assim:
Com a mais recente sintaxe do ECMAScript 6 *, você também pode desestruturar o valor de retorno de forma mais intuitiva:
Se você deseja colocar "rótulos" em cada um dos valores retornados (mais fáceis de manter), você pode retornar um objeto:
E para acessá-los:
Ou com a sintaxe do ES6:
* Consulte esta tabela para compatibilidade do navegador. Basicamente, todos os navegadores modernos, exceto o IE, oferecem suporte a essa sintaxe, mas você pode compilar o código ES6 até o JavaScript compatível com o IE no momento da criação, com ferramentas como Babel .
fonte
return {dCodes : dCodes, dCodes2 : dCodes2};
para facilitar a referência.const { dCodes, dCodes2 } = newCodes();
return {dCodes, dCodes2}
funciona da mesma maneira que @Intelekshual mencionado e (2) usando a mesma função, você pode simplesmente acessá-los com matrizes de desestruturação[dCodes, dCodes2] = newCodes()
ou (3) objetos({dCodes, dCodes2} = newCodes())
(não é necessário usar uma declaração no @Taylor , embora avar
seja mais adequado ao exemplo atual de Sasha).Você pode fazer isso do Javascript 1.7 em diante usando "atribuições de desestruturação" . Observe que eles não estão disponíveis nas versões Javascript mais antigas (ou seja, nem nas edições 3 e 5 do ECMAScript).
Permite atribuir 1 ou mais variáveis simultaneamente:
Você também pode usar a desestruturação do objeto combinada com a abreviação do valor da propriedade para nomear os valores retornados em um objeto e selecionar os que deseja:
E, a propósito, não se deixe enganar pelo fato de que o ECMAScript permite
return 1, 2, ...
. O que realmente acontece não é o que pode parecer. Uma expressão na instrução de retorno -1, 2, 3
- nada mais é que um operador vírgula aplicada a literais numéricos (1
,2
e3
) sequencialmente, o que eventualmente avalia para o valor de sua última expressão -3
. É por isso quereturn 1, 2, 3
é funcionalmente idêntico a nada além dissoreturn 3
.fonte
function foo(){return 1,2,3;}
fazerconsole.log([].push(foo()))
impressões 1.Basta retornar um objeto literal
fonte
Desde o ES6, você pode fazer isso
A expressão de retorno
{dCodes, dCodes2}
é um valor abreviado da propriedade e é equivalente a isso{dCodes: dCodes, dCodes2: dCodes2}
.Essa atribuição na última linha é chamada de atribuição de destruição de objeto . Ele extrai o valor da propriedade de um objeto e o atribui à variável de mesmo nome. Se você deseja atribuir valores de retorno a variáveis de nome diferente, você pode fazê-lo assim
let {dCodes: x, dCodes2: y} = newCodes()
fonte
O Ecmascript 6 inclui "atribuições de desestruturação" (como mencionado no kangax) para que em todos os navegadores (não apenas no Firefox) você possa capturar uma matriz de valores sem precisar criar uma matriz ou objeto nomeado com o único objetivo de capturá-los.
Você já pode experimentá-lo no Firefox!
fonte
Outro destaque a ser mencionado na sintaxe recém-introduzida (ES6) é o uso da abreviação de criação de objeto, além de destruir a atribuição.
Essa sintaxe pode ser preenchida com babel ou outro js polyfiller para navegadores mais antigos, mas felizmente agora funciona nativamente com as versões recentes do Chrome e Firefox.
Mas, ao criar um novo objeto, a alocação de memória (e eventual carga de gc) está envolvida aqui, não espere muito desempenho dele. O JavaScript não é a melhor linguagem para o desenvolvimento de coisas altamente ideais, mas se necessário, você pode colocar o resultado em objetos ao redor ou em técnicas que geralmente são truques comuns de desempenho entre JavaScript, Java e outras linguagens.
fonte
A melhor maneira para isso é
Então use
retorno 4
no ES6 você pode usar esse código
fonte
Além de retornar uma matriz ou um objeto, como outros recomendaram, você também pode usar uma função de coletor (semelhante à encontrada em The Little Schemer ):
Fiz um teste jsperf para ver qual dos três métodos é mais rápido. A matriz é mais rápida e o coletor é mais lento.
http://jsperf.com/returning-multiple-values-2
fonte
collector
é chamadocontinuation
e a técnica é chamada CPSEm JS, podemos facilmente retornar uma tupla com uma matriz ou objeto, mas não esqueça! => JS é uma
callback
linguagem orientada, e há um pequeno segredo aqui para "retornar vários valores" que ninguém ainda mencionou, tente o seguinte:torna-se
:)
bam! Esta é simplesmente outra maneira de resolver seu problema.
fonte
Adicionando as partes importantes que faltam para tornar essa pergunta um recurso completo, pois isso aparece nos resultados da pesquisa.
Destruição de Objetos
Na destruição de objeto, você não precisa necessariamente usar o mesmo valor da chave que o nome da sua variável, pode atribuir um nome de variável diferente, definindo-o como abaixo:
Reestruturação de matriz
Na desestruturação da matriz, você pode pular os valores que não precisa.
Vale notar que
...rest
sempre deve estar no final, pois não faz sentido destruir nada depois que todo o resto é agregado arest
.Espero que isso agregue algum valor a essa pergunta :)
fonte
Você também pode fazer:
fonte
Uma maneira muito comum de retornar vários valores em javascript é usar um literal de objeto , algo como:
e obtenha os valores assim:
ou até uma maneira mais curta:
e obtenha-os individualmente como:
fonte
Você pode usar "Objeto"
fonte
Tudo está correto.
return
processa logicamente da esquerda para a direita e retorna o último valor.fonte
,
é um operador e pode ser usado em qualquer expressão. Não há nada de especialreturn
aqui.Sugiro usar a última tarefa de desestruturação (mas verifique se ela é suportada em seu ambiente )
fonte
Conheço duas maneiras de fazer isso: 1. Retornar como matriz 2. Retornar como objeto
Aqui está um exemplo que eu encontrei:
fonte
Poucos dias atrás, eu tinha o requisito semelhante de obter vários valores de retorno de uma função que eu criei.
De muitos valores de retorno, eu precisava que ele retornasse apenas um valor específico para uma determinada condição e, em seguida, outro valor de retorno correspondente a outra condição.
Aqui está o exemplo de como eu fiz isso:
Função:
Obtendo o valor de retorno necessário do objeto retornado pela função:
O ponto principal de responder a essa pergunta é compartilhar essa abordagem de obter o Date em bom formato. Espero que tenha ajudado :)
fonte
Não estou acrescentando nada de novo aqui, mas de outra maneira alternativa.
fonte
Bem, não podemos exatamente fazer o que você está tentando. Mas algo provável abaixo pode ser feito.
Então, ao chamar o método
fonte