Estou a tentar devolver dois valores em JavaScript. Isso é possível?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
Não, mas você poderia devolver uma matriz contendo seus valores:
function getValues() {
return [getFirstValue(), getSecondValue()];
}
Então você pode acessá-los assim:
var values = getValues();
var first = values[0];
var second = values[1];
Com a mais recente ECMAScript 6 syntax*, você também pode desestruturar o valor de retorno de forma mais intuitiva:
const [first, second] = getValues();
Se você quiser colocar "etiquetas" em cada um dos valores retornados (mais fácil de manter), você pode retornar um objeto:
function getValues() {
return {
first: getFirstValue(),
second: getSecondValue(),
};
}
E para ter acesso a eles:
var values = getValues();
var first = values.first;
var second = values.second;
Ou com a sintaxe ES6:
const {first, second} = getValues();
* Veja esta tabela para compatibilidade do navegador. Basicamente, todos os navegadores modernos além do IE suportam essa sintaxe, mas você pode compilar o código ES6 até JavaScript compatível com o IE em tempo de compilação com ferramentas como Babel.
Você pode fazer isso a partir do Javascript 1.7 usando "desestruturar atribuições". Note que estes não estão disponíveis em versões Javascript mais antigas (ou seja - nem com ECMAScript 3ª nem 5ª edições).
Permite atribuir a 1+ variáveis simultaneamente:
var [x, y] = [1, 2];
x; // 1
y; // 2
// or
[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4
Você também pode usar desestruturação de objeto combinada com abreviação do valor da propriedade para nomear os valores de retorno em um objeto e escolher os que você deseja:
let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3
E já agora, não se deixe enganar pelo facto de o ECMAScript lhe permitir retornar 1, 2, ...
. O que realmente acontece lá não é o que possa parecer. Uma expressão em retorno - 1, 2, 3
- não é nada além de um operador de vírgula aplicado a literais numéricos (1
, 2
, e 3
) sequencialmente, que eventualmente avalia o valor de sua última expressão - 3
. É por isso que return 1, 2, 3
é funcionalmente idêntico a nada mais do que return 3
.
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
Basta devolver um objecto literalmente.
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);