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?

Carson Myers
quelle

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'
Mathias Bynens
quelle
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.

Andy E.
quelle
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.

ernst
quelle
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
5

Umsetzung der ernsthaften Idee.

http://jsfiddle.net/RichAyotte/6D2wP/

(function(a, b, c, d) {
    console.log(a, b, c, d);   
}.apply(this, ['a', 'b', 'c', 'd']));
Richard Ayotte
quelle
Dieser machte meinen Tag. Auspacken von Listen über bewerben, gut gemacht, Sir!
Mike239x
2
var one = arr[0];
var two = arr[1];
Rob Waminal
quelle
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. "

Jakob
quelle
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