Ich versuche, zwei Werte in JavaScript zurückzugeben . Ist das möglich?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
javascript
return
multiple-variable-return
Asim Zaidi
quelle
quelle
Antworten:
Nein, aber Sie können ein Array zurückgeben, das Ihre Werte enthält:
Dann können Sie wie folgt darauf zugreifen:
Mit der neuesten ECMAScript 6-Syntax * können Sie den Rückgabewert auch intuitiver destruieren:
Wenn Sie jedem der zurückgegebenen Werte "Beschriftungen" hinzufügen möchten (einfacher zu pflegen), können Sie ein Objekt zurückgeben:
Und um darauf zuzugreifen:
Oder mit ES6-Syntax:
* In dieser Tabelle finden Sie Informationen zur Browserkompatibilität. Grundsätzlich unterstützen alle modernen Browser außer IE diese Syntax, aber Sie können ES6-Code zur Build-Zeit mit Tools wie Babel bis zu IE-kompatiblem JavaScript kompilieren .
quelle
return {dCodes : dCodes, dCodes2 : dCodes2};
, um die Referenzierung zu vereinfachen.const { dCodes, dCodes2 } = newCodes();
return {dCodes, dCodes2}
der Objekteigenschaften funktioniert genauso wie @Intelekshual und (2) mit derselben Funktion können Sie einfach mit destrukturierenden Arrays[dCodes, dCodes2] = newCodes()
oder (3) Objekten darauf zugreifen({dCodes, dCodes2} = newCodes())
(dort muss keine Deklaration verwendet werden @Taylor) , obwohl avar
für das aktuelle Beispiel von Sasha passender wäre).Sie können dies ab Javascript 1.7 mit "Destructuring Assignments" tun . Beachten Sie, dass diese in älteren Javascript-Versionen nicht verfügbar sind (dh - weder in der 3. noch in der 5. Ausgabe von ECMAScript).
Sie können 1+ Variablen gleichzeitig zuweisen:
Sie können auch die Objektzerstörung in Kombination mit der Kurzform des Eigenschaftswerts verwenden , um die Rückgabewerte in einem Objekt zu benennen und die gewünschten auszuwählen:
Lassen Sie sich übrigens nicht von der Tatsache täuschen, dass ECMAScript dies ermöglicht
return 1, 2, ...
. Was dort wirklich passiert, ist nicht das, was scheinen mag. Ein Ausdruck in return - Anweisung -1, 2, 3
- ist nichts anderes als ein Komma - Operator auf Zahlenliterale angewendet (1
,2
, und3
) der Reihe nach , die schließlich auf den Wert des letzten Ausdrucks auswertet -3
. Deshalbreturn 1, 2, 3
ist funktional identisch mit nichts anderem alsreturn 3
.quelle
function foo(){return 1,2,3;}
Tunconsole.log([].push(foo()))
druckt 1.Geben Sie einfach ein Objektliteral zurück
quelle
Seit ES6 können Sie dies tun
Der Rückgabeausdruck
{dCodes, dCodes2}
ist eine Kurzform des Eigenschaftswerts und entspricht dieser{dCodes: dCodes, dCodes2: dCodes2}
.Diese Zuordnung in der letzten Zeile wird als Objektzerstörungszuweisung bezeichnet . Es extrahiert den Eigenschaftswert eines Objekts und weist ihn einer gleichnamigen Variablen zu. Wenn Sie Variablen mit unterschiedlichen Namen Rückgabewerte zuweisen möchten, können Sie dies folgendermaßen tun
let {dCodes: x, dCodes2: y} = newCodes()
quelle
Ecmascript 6 enthält "Destrukturierungszuweisungen" (wie von Kangax erwähnt), sodass Sie in allen Browsern (nicht nur in Firefox) ein Array von Werten erfassen können, ohne ein benanntes Array oder Objekt zum alleinigen Zweck der Erfassung erstellen zu müssen.
Sie können es bereits in Firefox ausprobieren!
quelle
Eine weitere erwähnenswerte (ES6) Syntax ist die Verwendung der Kurzform zur Objekterstellung zusätzlich zur Zerstörung der Zuweisung.
Diese Syntax kann mit babel oder einem anderen js-Polyfüller für ältere Browser polygefüllt werden, funktioniert aber glücklicherweise jetzt nativ mit den neuesten Versionen von Chrome und Firefox.
Da beim Erstellen eines neuen Objekts jedoch die Speicherzuweisung (und die eventuelle GC-Auslastung) eine Rolle spielen, sollten Sie nicht viel Leistung davon erwarten. JavaScript ist sowieso nicht die beste Sprache, um hochoptimale Dinge zu entwickeln. Wenn dies jedoch erforderlich ist, können Sie Ihr Ergebnis auf ein umgebendes Objekt oder solche Techniken übertragen, die normalerweise übliche Leistungstricks zwischen JavaScript, Java und anderen Sprachen sind.
quelle
Der beste Weg dafür ist
Dann benutze
Rückkehr 4
In ES6 können Sie diesen Code verwenden
quelle
Neben der Rückgabe eines Arrays oder eines Objekts, wie von anderen empfohlen, können Sie auch eine Collector-Funktion verwenden (ähnlich der in The Little Schemer ):
Ich habe einen jsperf-Test durchgeführt, um festzustellen, welche der drei Methoden schneller ist. Das Array ist am schnellsten und der Kollektor am langsamsten.
http://jsperf.com/returning-multiple-values-2
quelle
collector
heißtcontinuation
und die Technik heißt CPSIn JS können wir leicht ein Tupel mit einem Array oder Objekt zurückgeben, aber nicht vergessen! => JS ist eine
callback
orientierte Sprache, und hier gibt es ein kleines Geheimnis für die "Rückgabe mehrerer Werte", das noch niemand erwähnt hat. Versuchen Sie Folgendes:wird
:) :)
bam! Dies ist einfach eine andere Möglichkeit, Ihr Problem zu lösen.
quelle
Hinzufügen der fehlenden wichtigen Teile, um diese Frage zu einer vollständigen Ressource zu machen, da dies in den Suchergebnissen angezeigt wird.
Objektzerstörung
Bei der Objektzerstörung müssen Sie nicht unbedingt denselben Schlüsselwert wie Ihren Variablennamen verwenden. Sie können einen anderen Variablennamen zuweisen, indem Sie ihn wie folgt definieren:
Array-Destrukturierung
Bei der Array-Destrukturierung können Sie die nicht benötigten Werte überspringen.
Es ist erwähnenswert, dass dies
...rest
immer am Ende sein sollte, da es keinen Sinn macht, etwas zu zerstören, nachdem alles andere zusammengefasst wurderest
.Ich hoffe, dass dies dieser Frage einen Mehrwert verleiht :)
quelle
Sie können auch tun:
quelle
Eine sehr häufige Art und Weise zu mehr Werte zurückgeben in JavaScript ist unter Verwendung eines Objektliterale , so etwas wie:
und erhalten Sie die Werte wie folgt:
oder noch kürzer:
und bekommen sie individuell wie:
quelle
Sie können "Objekt" verwenden
quelle
Alles ist richtig.
return
verarbeitet logisch von links nach rechts und gibt den letzten Wert zurück.quelle
,
ist ein Operator und kann in jedem Ausdruck verwendet werden. Hier ist nichts Besonderesreturn
.Ich würde vorschlagen, die neueste Destrukturierungsaufgabe zu verwenden (aber stellen Sie sicher, dass sie in Ihrer Umgebung unterstützt wird ).
quelle
Ich kenne zwei Möglichkeiten, dies zu tun: 1. Als Array zurückgeben 2. Als Objekt zurückgeben
Hier ist ein Beispiel, das ich gefunden habe:
quelle
Vor ein paar Tagen hatte ich die ähnliche Anforderung, mehrere Rückgabewerte von einer von mir erstellten Funktion zu erhalten.
Von vielen Rückgabewerten brauchte ich es, um nur einen bestimmten Wert für eine gegebene Bedingung und dann einen anderen Rückgabewert zurückzugeben, der einer anderen Bedingung entspricht.
Hier ist das Beispiel, wie ich das gemacht habe:
Funktion:
Erforderlichen Rückgabewert von Objekt abrufen, das von der Funktion zurückgegeben wird:
Der springende Punkt bei der Beantwortung dieser Frage ist, diesen Ansatz zu teilen, um Date in einem guten Format zu erhalten. Hoffe es hat dir geholfen :)
quelle
Ich füge hier nichts Neues hinzu, als einen anderen alternativen Weg.
quelle
Nun, wir können nicht genau das tun, was Sie versuchen. Aber etwas, das wahrscheinlich unten liegt, kann getan werden.
Dann beim Aufruf der Methode
quelle