J'essaie de renvoyer deux valeurs en JavaScript. Est-ce possible ?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
Non, mais vous pourriez retourner un tableau contenant vos valeurs :
function getValues() {
return [getFirstValue(), getSecondValue()];
}
Vous pouvez alors y accéder comme suit :
var values = getValues();
var first = values[0];
var second = values[1];
Avec la dernière syntaxe ECMAScript 6*, vous pouvez également déstructurer la valeur de retour de manière plus intuitive :
const [first, second] = getValues();
Si vous voulez mettre des "étiquettes" sur chacune des valeurs retournées (plus facile à maintenir), vous pouvez retourner un objet :
function getValues() {
return {
first: getFirstValue(),
second: getSecondValue(),
};
}
Et y accéder :
var values = getValues();
var first = values.first;
var second = values.second;
Ou avec la syntaxe ES6 :
const {first, second} = getValues();
* Voir ce tableau pour la compatibilité des navigateurs. Fondamentalement, tous les navigateurs modernes, à l'exception d'IE, supportent cette syntaxe, mais vous pouvez compiler le code ES6 en JavaScript compatible avec IE au moment de la construction avec des outils comme Babel.
Vous pouvez le faire à partir de Javascript 1.7 en utilisant ["destructuring assignments"][1]. Notez que celles-ci ne sont pas disponibles dans les versions plus anciennes de Javascript (c'est-à-dire ni avec la 3e ni avec la 5e édition d'ECMAScript).
Cela vous permet d'assigner à 1+ variables simultanément :
var [x, y] = [1, 2];
x; // 1
y; // 2
// or
[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4
Vous pouvez également utiliser la [déstructuration d'objet combinée à une abréviation de valeur de propriété][3] pour nommer les valeurs de retour d'un objet et choisir celles que vous voulez :
let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3
Et d'ailleurs, ne vous laissez pas tromper par le fait que l'ECMAScript vous permet de retourner 1, 2, ...
. Ce qui se passe réellement ici n'est pas ce que l'on pourrait croire. Une expression dans l'instruction return - 1, 2, 3
- n'est rien d'autre qu'un opérateur virgule appliqué à des littéraux numériques (1
, 2
, et 3
) de manière séquentielle, qui finit par être évalué à la valeur de sa dernière expression - 3
. C'est pourquoi return 1, 2, 3
est fonctionnellement identique à rien d'autre que return 3
.
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
[1] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment [2] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Browser_compatibility [3] : http://2ality.com/2014/06/es6-multiple-return-values.html
Retournez simplement un objet littéral
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);