Array in JavaScript in separate Variablen entpacken


141

Dies ist ein einfaches Problem, und ich habe es schon einmal gemacht. Ich kann mich einfach nicht erinnern, wie oder wie es genau hieß.

In Python kann ich das tun:

arr = ['one', 'two']
one, two = arr

Wie mache ich das in JavaScript?

Antworten:


173

Dies ist derzeit die einzige browserübergreifende Lösung AFAIK:

var one = arr[0],
    two = arr[1];

ES6 ermöglicht die Destrukturierungszuweisung:

let [x, y] = ['foo', 'bar'];
console.log(x); // 'foo'
console.log(y); // 'bar'

Oder um an Ihrem ersten Beispiel festzuhalten:

var arr = ['one', 'two'];
var [one, two] = arr;

Sie können auch einen Standardwert erstellen:

const [one = 'one', two = 'two', three = 'three'] = [1, 2];
console.log(one); // 1
console.log(two); // 2
console.log(three); // 'three'

5
Destrukturierungsauftrag hat volle Unterstützung ab heute kangax.github.io/compat-table/es6/#test-destructuring
Grandrew

20

Das ist eine Destrukturierungsaufgabe . Sie können dies in einigen Browsern mit der folgenden Syntax tun:

[one, two] = arr;

Es wird in einigen der neuesten Browser und Transpiler wie Babel und Traceur unterstützt . Dies war eine Funktion, die mit ECMAScript 4 eingeführt wurde und später zu ECMAScript Harmony wurde, das schließlich zu ES 2015 wurde.


Sieht aus wie es Teil von ES6 (2015) ist, nicht ES4? ecma-international.org/ecma-262/6.0/...
Jab

@jab: danke! Manchmal werden diese alten Antworten vergessen und veraltet, obwohl es so aussieht, als hätte Mathias diese Informationen bereits zu seiner Antwort hinzugefügt :)
Andy E


6

Sie können die Apply-Funktion des Arrays verwenden, wenn Array-Elemente als Funktionsargumente übergeben werden sollen.


4
Ich bin nicht sicher, ob ein JavaScript Arrayeine .apply()Funktion hat. Ich denke du meintest some_function.apply(this, my_array). Siehe diese Antwort
Kit


2
var one = arr[0];
var two = arr[1];

1
Sie sollten wirklich verwenden var, um zu verhindern, dass die Variablen den globalen Bereich verschmutzen.
Mathias Bynens

Ich gehe nur davon aus, dass alle Variablen deklariert sind :)
Rob Waminal

Es ist wahrscheinlich eine bessere Idee, alle vars für jeden Bereich auf einmal zu deklarieren, als zwei separate varDeklarationen zu haben.
Mathias Bynens

2

CoffeeScript hat es: http://jashkenas.github.com/coffee-script/#pattern_matching

Und zitiert oben auf der Seite:

"CoffeeScript ist eine kleine Sprache, die sich in JavaScript kompilieren lässt. Stellen Sie sich JavaScript als weniger protzigen kleinen Bruder vor - dieselben Gene, ungefähr dieselbe Größe, aber einen anderen Sinn für Stil. Abgesehen von einer Handvoll Bonus-Goodies entsprechen Aussagen in CoffeeScript einer -zu-eins mit ihrem Äquivalent in JavaScript, es ist nur eine andere Art, es auszudrücken. "


1
Dies beantwortet die Frage nicht. Ich schätze, dass CoffeeScript einige nette Dinge hat, aber die Frage bezieht sich auf Javascript.
Hovis Biddle

Toter Link: ((((
Paul Draper
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.