In anderen Sprachen wie Python 2 und Python 3 können Sie einer Tupelvariablen Werte definieren, diese zuweisen und ihre Werte wie folgt abrufen:
tuple = ("Bob", 24)
name, age = tuple
print(name) #name evaluates to Bob
print(age) #age evaluates to 24
Gibt es etwas Ähnliches in JavaScript? Oder muss ich es einfach hässlich mit einem Array machen:
tuple = ["Bob", 24]
name = tuple[0] //name Evaluates to Bob
age = tuple[1] //age Evaluates to 24
Gibt es eine bessere Möglichkeit, Python-Tupel in JavaScript 5 zu simulieren?
Update: Siehe die Antwort zu ES6, die bei neuen Projekten gegenüber CoffeeScript bevorzugt werden sollte.
var tuple, name, age;
var name=tuple[0], age=tuple[1];
Es ist ein bisschen mehr tippen, aber hässlich könnte eine Übertreibung sein.Antworten:
Javascript 1.7 hat eine zerstörte Zuordnung hinzugefügt , mit der Sie im Wesentlichen das tun können, wonach Sie suchen.
quelle
Du musst es auf hässliche Weise tun. Wenn Sie so etwas wirklich wollen, können Sie sich CoffeeScript ansehen, das das und viele andere Funktionen bietet, mit denen es eher wie Python aussieht (es tut mir leid, dass es wie eine Werbung klingt, aber ich mag es wirklich.)
quelle
Sie können etwas Ähnliches tun:
und dann Name und Alter als Attribute bezeichnen
quelle
Object.freeze()
, dh:tuple = Object.freeze({ name:'Bob', age:14 })
Diese "Tupel" -Funktion wird in EcmaScript2015 als Destrukturierung bezeichnet und wird bald von aktuellen Browsern unterstützt. Derzeit wird dies nur von Firefox und Chrome unterstützt .
Aber hey, du kannst einen Transpiler benutzen .
Der Code würde so schön aussehen wie Python:
quelle
Ein eingefrorenes Array verhält sich identisch mit einem Python-Tupel:
Seien Sie schick und definieren Sie eine Klasse
Funktioniert heute in den neuesten Browsern.
quelle
Tupel werden in JavaScript nicht unterstützt
Wenn Sie nach einer unveränderlichen Liste suchen, kann Object.freeze () verwendet werden, um ein Array unveränderlich zu machen.
Quelle: Mozilla Developer Network - Object.freeze ()
Weisen Sie ein Array wie gewohnt zu, aber sperren Sie es mit 'Object.freeze ()
Verwenden Sie die Werte wie ein normales Array (Python-Mehrfachzuweisung wird nicht unterstützt)
Versuchen Sie, einen neuen Wert zuzuweisen
Der Wert wird jedoch nicht geändert
quelle
Leider können Sie diese Tupelzuweisungssyntax nicht in (ECMA | Java) Script verwenden.
BEARBEITEN: Jemand, der mit Mozilla / JS 1.7 verbunden ist - dies würde nicht browserübergreifend funktionieren, aber wenn dies nicht erforderlich ist, gibt es Ihre Antwort.
quelle
Dies ist nicht dazu gedacht, tatsächlich im wirklichen Leben verwendet zu werden, sondern nur eine interessante Übung. Siehe Warum ist die Verwendung der JavaScript-Bewertungsfunktion eine schlechte Idee? für Details.
Dies ist die nächstgelegene Option, ohne auf herstellerspezifische Erweiterungen zurückzugreifen:
Hilfsfunktion:
Beweis, dass es in beliebigem Umfang funktioniert:
eval
wird in Safari nicht unterstützt.quelle
Als Aktualisierung der Antwort des Ministers können Sie dies jetzt mit es2015 tun:
https://jsbin.com/fubaluwimo/edit?js,console
quelle
Sie können auch einen Tupeltyp in Javascript verwenden. Definieren Sie es einfach mit Funktionen höherer Ordnung (der akademische Begriff ist Kirchenkodierung):
Bitte beachten Sie, dass dies
Tuple
nicht als normaler Konstruktor verwendet wird. Die Lösung basiert überhaupt nicht auf dem Prototypsystem, sondern ausschließlich auf Funktionen höherer Ordnung.Was sind die Vorteile von Tupeln gegenüber
Array
Tupeln? Kirchenkodierte Tupel sind vom Design her unveränderlich und verhindern so Nebenwirkungen, die durch Mutationen verursacht werden. Dies hilft, robustere Anwendungen zu erstellen. Darüber hinaus ist es einfacher, über Code nachzudenken, der zwischenArray
s als Sammlungstyp (z. B.[a]
) und Tupeln als zugehörige Daten verschiedener Typen (z(a, b)
. B. ) unterscheidet.quelle
Hier ist eine einfache Implementierung von Javascript Tuple:
Dies ist ein 2-Tupel. Sie können jedoch mein Beispiel so ändern, dass es 3,4,5,6 usw. Tupel unterstützt.
quelle
tuple
Instanz ist immer noch veränderbar, also technisch gesehen kein Tupel. Zum Beweiswechseltuple.Item1 = "Steve"
dannconsole.log()
die Ausgabe.Hier ist eine Version von Matthew James Davis 'Antwort mit den hinzugefügten Python-Tupel-Methoden:
quelle