1150 votes

Renvoyer plusieurs valeurs en JavaScript?

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;
};
 

1763voto

Sasha Chedygov Points 36783

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;
 

295voto

kangax Points 19954

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;

76voto

Sean Kinsey Points 17117

Renvoie juste 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);
 

27voto

user3015682 Points 36

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!

9voto

Zelenova Points 73

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.

http://jsperf.com/Returning-multiple-values-2

Prograide.com

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.

Powered by:

X