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;
};
javascript
return
multiple-variable-return
Asim Zaidi
la source
la source
Réponses:
Non, mais vous pouvez renvoyer un tableau contenant vos valeurs:
Ensuite, vous pouvez y accéder comme suit:
Avec la dernière syntaxe ECMAScript 6 *, vous pouvez également détruire la valeur de retour de manière plus intuitive:
Si vous souhaitez mettre des "labels" sur chacune des valeurs retournées (plus facile à maintenir), vous pouvez renvoyer un objet:
Et pour y accéder:
Ou avec la syntaxe ES6:
* Voir ce tableau pour la compatibilité du navigateur. Fondamentalement, tous les navigateurs modernes à part IE prennent en charge cette syntaxe, mais vous pouvez compiler le code ES6 en JavaScript compatible IE au moment de la construction avec des outils comme Babel .
la source
return {dCodes : dCodes, dCodes2 : dCodes2};
pour le rendre plus facile à référencer.const { dCodes, dCodes2 } = newCodes();
return {dCodes, dCodes2}
fonctionnent exactement comme @Intelekshual mentionné et (2) en utilisant la même fonction, vous pouvez simplement y accéder avec des tableaux de déstructuration[dCodes, dCodes2] = newCodes()
ou (3) des objets({dCodes, dCodes2} = newCodes())
(pas besoin d'utiliser une déclaration ici @Taylor , bien que avar
serait plus approprié pour l'exemple actuel de Sasha).Vous pouvez le faire à partir de Javascript 1.7 en utilisant des "affectations de déstructuration" . Notez que ceux-ci ne sont pas disponibles dans les anciennes versions de Javascript (ce qui signifie - ni avec ECMAScript 3e ni 5e éditions).
Il vous permet d'affecter à 1+ variables simultanément:
Vous pouvez également utiliser la déstructuration d'objet combinée à un raccourci de valeur de propriété pour nommer les valeurs de retour dans un objet et sélectionner celles que vous souhaitez:
Et en passant, ne vous laissez pas berner par le fait que ECMAScript vous le permet
return 1, 2, ...
. Ce qui se passe vraiment là-bas n'est pas ce qui peut sembler. Une expression dans la déclaration de retour -1, 2, 3
- n'est qu'un opérateur virgule appliqué à littéraux numériques (1
,2
et3
) de manière séquentielle, qui évalue finalement à la valeur de sa dernière expression -3
. C'est pourquoireturn 1, 2, 3
est fonctionnellement identique à rien de plusreturn 3
.la source
function foo(){return 1,2,3;}
faireconsole.log([].push(foo()))
imprime 1.Retourne juste un objet littéral
la source
Depuis ES6, vous pouvez le faire
L'expression de retour
{dCodes, dCodes2}
est un raccourci de valeur de propriété et est équivalente à cela{dCodes: dCodes, dCodes2: dCodes2}
.Cette affectation sur la dernière ligne est appelée affectation destructrice d'objets . Il extrait la valeur de propriété d'un objet et l'affecte à une variable du même nom. Si vous souhaitez attribuer des valeurs de retour à des variables de nom différent, vous pouvez le faire comme ceci
let {dCodes: x, dCodes2: y} = newCodes()
la source
Ecmascript 6 inclut des "assignations de déstructuration" (comme l'a mentionné kangax), donc dans tous les navigateurs (pas seulement Firefox), vous pourrez capturer un tableau de valeurs sans avoir à créer un tableau ou un objet nommé dans le seul but de les capturer.
Vous pouvez déjà l'essayer dans Firefox!
la source
Une autre valeur à mentionner (ES6) est une syntaxe nouvellement introduite: l'utilisation du raccourci de création d'objet en plus de la destruction de l'affectation.
Cette syntaxe peut être remplie avec babel ou un autre polyfiller js pour les navigateurs plus anciens, mais heureusement, elle fonctionne désormais de manière native avec les versions récentes de Chrome et Firefox.
Mais comme créer un nouvel objet, l'allocation de mémoire (et éventuellement la charge de GC) sont impliqués ici, ne vous attendez pas à beaucoup de performances de sa part. JavaScript n'est de toute façon pas le meilleur langage pour développer des choses hautement optimales, mais si cela est nécessaire, vous pouvez envisager de mettre votre résultat sur un objet environnant ou de telles techniques qui sont généralement des astuces de performance courantes entre JavaScript, Java et d'autres langages.
la source
Le meilleur moyen pour cela est
Ensuite, utilisez
retour 4
dans ES6, vous pouvez utiliser ce code
la source
Outre le retour d'un tableau ou d'un objet comme d'autres l'ont recommandé, vous pouvez également utiliser une fonction de collecteur (similaire à celle trouvée dans The Little Schemer ):
J'ai fait un test jsperf pour voir laquelle des trois méthodes est la plus rapide. Le tableau est le plus rapide et le collecteur est le plus lent.
http://jsperf.com/returning-multiple-values-2
la source
collector
Est généralement appeléecontinuation
et la technique est appelée CPSEn JS, nous pouvons facilement retourner un tuple avec un tableau ou un objet, mais n'oubliez pas! => JS est un
callback
langage orienté, et il y a un petit secret ici pour "retourner plusieurs valeurs" que personne n'a encore mentionné, essayez ceci:devient
:)
bam! C'est simplement une autre façon de résoudre votre problème.
la source
Ajout des parties importantes manquantes pour faire de cette question une ressource complète, car cela apparaît dans les résultats de recherche.
Déstructuration d'objets
Dans la déstructuration d'objets, vous n'avez pas nécessairement besoin d'utiliser la même valeur de clé que le nom de votre variable, vous pouvez attribuer un nom de variable différent en le définissant comme ci-dessous:
Déstructuration des baies
Dans la déstructuration de tableaux, vous pouvez ignorer les valeurs dont vous n'avez pas besoin.
Il convient de noter que cela
...rest
devrait toujours être à la fin car cela n'a aucun sens de détruire quoi que ce soit après que tout le reste soit agrégérest
.J'espère que cela ajoutera de la valeur à cette question :)
la source
Vous pouvez également faire:
la source
Une façon très courante de renvoyer plusieurs valeurs en javascript consiste à utiliser un objet littéraux , donc quelque chose comme:
et obtenez les valeurs comme ceci:
ou même d'une manière plus courte:
et obtenez-les individuellement comme:
la source
Vous pouvez utiliser "Objet"
la source
Tout va bien.
return
traite logiquement de gauche à droite et renvoie la dernière valeur.la source
,
est un opérateur et peut être utilisé dans toute expression. Il n'y a rien de spécialreturn
ici.Je suggère d'utiliser la dernière affectation de déstructuration (mais assurez-vous qu'elle est prise en charge dans votre environnement )
la source
Je connais deux façons de procéder: 1. Retour en tant que tableau 2. Retour en tant qu'objet
Voici un exemple que j'ai trouvé:
la source
Il y a quelques jours, j'avais la même exigence d'obtenir plusieurs valeurs de retour d'une fonction que j'avais créée.
De nombreuses valeurs de retour, j'en avais besoin pour renvoyer uniquement une valeur spécifique pour une condition donnée, puis une autre valeur de retour correspondant à une autre condition.
Voici l'exemple de la façon dont je l'ai fait:
Une fonction:
Obtention de la valeur de retour requise de l'objet renvoyé par la fonction:
L'intérêt de répondre à cette question est de partager cette approche pour obtenir Date dans un bon format. J'espère que cela vous a aidé :)
la source
Je n'ajoute rien de nouveau ici, mais une autre manière alternative.
la source
Eh bien, nous ne pouvons pas exactement faire ce que vous essayez. Mais quelque chose de probable ci-dessous peut être fait.
Puis lors de l'appel de la méthode
la source