2010-08-19 8 views
18

Ich würde gerne wissen, wenn Standard-JS bietet eine Möglichkeit, eine Zeichenfolge direkt in eine Reihe von Variablen während ihrer ersten Deklaration zu teilen. Zum Beispiel in Perl würde ich verwenden:Javascript: Split-String direkt auf Variablen

my ($a, $b, $c) = split '-', $str; 

In Firefox kann ich

var [a, b, c] = str.split('-'); 

schreiben Aber diese Syntax ist nicht Teil des ECMA-Standard und als solche Brüche in allen anderen Browsern. Was ich versuche zu tun ist, zu vermeiden zu schreiben:

var array = str.split('-'); 
var a = array[0]; 
var b = array[1]; 
var c = array[2]; 

Da für den Code, den ich im Moment schreibe ein solches Verfahren eine echte Schmerzen würde, Ich schaffe 20 Variablen aus 7 verschiedenen spaltet und möchte nicht eine solche ausführliche Methode verwenden müssen.

Kennt jemand eine elegante Möglichkeit, dies zu tun?

+2

Warum müssen Sie diese in 'var' Objekte ablegen? Was ist das Endspiel hier? – hunter

+0

Es ist Teil eines Web-Formulars zur Verwaltung einer kleinen Datenbank von Vor-Ort-Veranstaltungen auf unserem Campus. Um den Benutzern zu zeigen, wie ihre Daten aussehen werden, sobald sie formatiert sind, nehmen wir die Informationen direkt aus den Formularfeldern (mit jquery) und erzeugen ein wenig HTML. Um die Datumsbereiche und einige andere Informationen richtig zu formatieren, ist es viel praktischer, sie in benannten Variablen zu speichern, anstatt zu versuchen, die richtigen Werte mit $ ('input [name = start_date]') herauszuholen. val() .split (''). Siehe http://pastie.org/1102123 – nb5

+0

mögliche Duplikate von [Array in separate Variablen in JavaScript entpacken] (http://stackoverflow.com/questions/3422458/unpacking-array-into-separate-variables-in- Javascript) –

Antwort

29

Sie können es nur tun leicht eleganter durch die var Schlüsselwort für jede Variable Weglassen und Trennen der Ausdrücke durch Kommata:

var array = str.split('-'), 
    a = array[0], b = array[1], c = array[2]; 

ES6 Destrukturierung Zuordnung standardisiert, die Sie, was Firefox erlaubt, zu tun hat jetzt eine ganze Weile unterstützt:

var [a, b, c] = str.split('-'); 

Sie Browser-Unterstützung compatibility table Kangax der Verwendung überprüfen.

+1

Ich vermutete so viel. Es ist verdammt beschämend, so ausführlich darüber zu sein. Ah gut, vielen Dank für Ihre Hilfe :) – nb5

+0

Sie können auch die "var" für Golf-Code entfernen: [a, b, c] = str.split ('-'); – Elo

6
var str = '123', 
    array = str.split(''); 

(function(a, b, c) { 
    a; // 1 
    b; // 2 
    c; // 3 
}).apply(null, array) 
+0

anwenden ist eine coole Methode, aber ich suche weniger Code als mehr;) – nb5

+0

@ nb5: Ich glaube nicht, dass es * das * viel mehr Code als 'var a = Array [0], b = Array [ 1], c = Array [2]; '. –

+0

Aber funktioniert es? Ich sehe es auch nicht funktionieren :( – mplungjan

0

Sie eine Funktion erstellen können, die durch das Array wird Schleife, die durch die str.split Methode und die automatische Erzeugung Variablen auf diese Weise erstellt wird:

function autoGenerateVarFromArray(srcArray, varNamePrefix) 
{ 
    var i = 0 
    while(i < srcArray.length) 
    { 
    this[varNamePrefix +'_' + i] = srcArray[i]; 
    i++; 
    } 
} 

Hier ist ein Beispiel dafür, wie die Verwendung dieses:

var someString = "Mary had a little Lamb"; 
autoGenerateVarFromArray(someString.split(' '), 'temp'); 

alert(this.temp_3); // little 
+0

Diese ziemlich cool, aber soweit ich autogenerierte Variablen mit einem einzigen Präfix gefolgt von einer Zahl sehen kann, wäre etwas anders als nur direkt Bezug auf das Array Element nach Index. – nb5

+0

Diese Methode verhindert die Code-Minimierung. –

+0

@ nb5: Das stimmt. Diese Lösung ist möglicherweise besser skalierbar, wenn Sie ein großes Array und viele zu initialisierende Variablen haben. Wenn Sie nur eine kleine Array-Größe haben, dann sind die anderen geposteten Lösungen nicht so schlecht (var apple = a [1], banana = a [2], etc.) – Gary

Verwandte Themen