J'essaie de retourner deux valeurs en JavaScript. Est-ce possible?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
J'essaie de retourner 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 pouvez retourner un tableau contenant vos valeurs:
var newCodes = function(){
var dCodes = fg.codecsCodes.rs; // Linked ICDs
var dCodes2 = fg.codecsCodes2.rs; //Linked CPTs
return [dCodes, dCodes2];
};
Ensuite, vous pouvez y accéder comme ceci:
var codes = newCodes();
var dCodes = codes[0];
var dCodes2 = codes[1];
Si vous voulez mettre des "labels" sur chacune des valeurs retournées (plus facile à maintenir), vous pouvez retourner un objet:
var newCodes = function(){
var dCodes = fg.codecsCodes.rs; // Linked ICDs
var dCodes2 = fg.codecsCodes2.rs; //Linked CPTs
return {
dCodes: dCodes,
dCodes2: dCodes2
};
};
Et pour y accéder:
var codes = newCodes();
var dCodes = codes.dCodes;
var dCodes2 = codes.dCodes2;
Vous ne pouvez pas le faire avec Javascript standard (sens - ni avec ECMAScript 3e, ni 5ème éditions). Cependant, Javascript 1.7 - extension du langage présents dans certaines implémentations (par exemple, Mozilla) - a soi-disant "déstructuration"attributions.
Il permet d'attribuer à 1+ variables simultanément:
var [x, y] = [1, 2];
x; // 1
y; // 2
// or
[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4
Et en passant, ne vous laissez pas berner par le fait que ECMAScript vous permet d' return 1, 2, ...
. Ce qui se passe vraiment, il n'est pas ce qui pourrait sembler être. Une expression dans l'instruction de retour - 1, 2, 3
- n'est rien, mais un opérateur virgule appliquée à littéraux numériques (1
, 2
, et 3
) de manière séquentielle, ce qui finalement donne la valeur de la dernière expression - 3
. C'est pourquoi, return 1, 2, 3
est fonctionnellement identique à rien de plus, mais return 3
.
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
Ecmascript 6 inclut des "affectations destructurantes" (comme kangax mentionné) donc dans tous les navigateurs (pas seulement Firefox) vous serez capable de capturer un tableau de valeurs sans avoir à créer un tableau ou un objet nommé dans le seul but de les capturer.
//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();
Vous pouvez déjà l'essayer dans Firefox!
Sauf que d’autres ont recommandé de retour un tableau ou un objet, vous pouvez également utiliser une fonction de collecteur (semblable à celle qui que se trouve dans The Schemer peu) :
J’ai fait un jsperf test afin de savoir lequel des trois méthodes est plus rapide. Tableau est plus rapide et le collecteur est plus lente.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.