Javascript multidimensionales Array?

8

Ich hoffe, ich kann mich auf Englisch und in dem, was ich schaffen möchte, klar machen. Ich beginne mit dem, was ich will.

Ich möchte einen IBAN-Calculator erstellen, der 1-n IBAN-Nummern generieren und auch eine gegebene IBAN-Nummer validieren kann. IBANnumbers werden in vielen Ländern für die Zahlung verwendet und das Tool, das ich machen möchte, kann verwendet werden, um die Zahlen für Testzwecke zu generieren.

Auf wikipedia (niederländische Seite) habe ich eine Liste mit Ländern und deren Definition der IBAN-Nummer gefunden. Was ich damit machen möchte, ist eine Art Array, das alle Länder mit ihrem Namen, dem Code, dort IBANlength, dem Bankformat und dem Kontoformat enthält.

Das Array muss verwendet werden, um:

  1. Erstellen Sie eine Auswahlliste (um ein Land auszuwählen)
  2. wird verwendet, um das Teil zum Generieren von Zahlen zu überprüfen
  3. wird verwendet, um den Teil für die Validierung der Nummer
  4. zu überprüfen

Ich weiß nicht, ob ein Array der beste Weg ist, aber das ist bisher das meiste Wissen, das ich habe.

Ich habe bereits eine Tabelle wie diese erstellt, die die Info enthält (diese Tabelle wird nicht verwendet, aber es war eine gute Möglichkeit, um Ihnen zu zeigen, was ich über die Struktur denke):

%Vor%

und viele mehr.

    
Megapool020 27.03.2010, 15:43
quelle

3 Antworten

40

Die Hauptantwort

Ich würde dafür gar kein "Array" verwenden. JavaScript-Objekte sind Maps (manchmal auch "assoziative Arrays" genannt, aber wir verwenden "map", um Verwechslungen mit numerisch indizierten Arrays zu vermeiden), sodass Sie dies ganz einfach mit einfachen Objekten tun können:

%Vor%

(Beachten Sie, dass ich das Unicode-Escape für das 'e' mit dem Umlaut darüber verwendet habe; wahrscheinlich für das Beste, obwohl wenn Sie vorsichtig mit Ihren Codierungen sind, sollten Sie in Ordnung sein.)

Dies verwendet die Objektliteralnotation, um die einzelnen Objekte und die gesamte Karte zu erstellen. In der Gesamtkarte gibt es eine Eigenschaft für jedes Land, wobei der Eigentumsschlüssel der Ländercode und der Eigenschaftswert ein Objekt ist, das die Informationen aus Ihrer Tabelle bereitstellt.

Sie können dann die Informationen eines Landes in der Karte nachsehen, indem Sie seinen Ländercode wie folgt verwenden:

%Vor%

Oder wenn Sie den Ländercode in einer anderen Variablen haben:

%Vor%

Wenn Sie es vorziehen, nach etwas anderem als dem Ländercode zu suchen, passen Sie die Dinge einfach entsprechend an.

Ein Präfix für Schlüssel aus Paranoia

Wenn ich dies mit Informationen zu tun habe, die ich kaum kontrollieren kann, gebe ich normalerweise einen Präfix an den Schlüssel, um Probleme mit Konflikten mit den eingebauten Eigenschaften eines Objekts zu vermeiden (obwohl ich nicht der Meinung bin, dass ein Konflikt sehr wahrscheinlich ist) Hier). Wenn Sie beispielsweise ein Präfix "cc" verwenden würden, würden die Dinge so aussehen:

Die Karte:

%Vor%

Die Suche:

%Vor%

Schleife durch die Schlüssel in der Karte

Wenn Sie (aus irgendeinem Grund) alle diese Punkte durchlaufen müssen, können Sie keinen numerischen Index verwenden, da es sich nicht um ein Array handelt. Zum Glück ist dies genau das, wofür die JavaScript for..in -Schleife gedacht ist: Sie durchsucht die Namen (Schlüssel) der Objekteigenschaften:

%Vor%

(Sie verwenden hasOwnProperty , um zwischen Eigenschaften zu unterscheiden, die das Objekt auf direkt gesetzt hat, gegenüber denen, die es von seinem Prototyp erhält. Wenn Sie mit der prototypischen Vererbung von JavaScript nicht vertraut sind, tun Sie das nicht Sorgen Sie sich zu sehr, verwenden Sie nur eine Schleife wie oben.)

Das Beste aus beiden Welten

Da JavaScript-Arrays Objekte sind und alle JavaScript-Objekte Maps sind, können Sie numerische Indexierung und Indexierung sogar nach Ländercode kombinieren. Hier ist ein Beispiel dafür:

Die Karte:

%Vor%

Hier werden diese Präfixe sehr wichtig, weil Arrays mehr Eigenschaften haben als einfache Objekte.

Die Suche nach Ländercode ist unverändert:

%Vor%

Aber wenn Sie (aus irgendeinem Grund) einen numerischen Index verwenden müssen, können Sie das auch tun:

%Vor%

Cross-Indizierung nach der Tatsache als Aboev ist am besten nur für statische Dinge wie Ihre IBAN-Karte. Wenn Sie Einträge als Teil Ihres Programms hinzufügen oder entfernen würden, würde ich wahrscheinlich stattdessen ein wiederverwendbares Objekt daraus machen.

Wenn ich Dinge sowohl numerisch als auch mit einem Schlüssel benötige, separiere ich die Dinge normalerweise etwas, indem ich die Mapaspekte zu einer Eigenschaft des Arrays mache, anstatt das Array direkt zu verwenden. Das erfordert nur eine kleine Änderung in unserer Schleife, die die Karte erstellt, nachdem wir das Array initialisiert haben:

Die Karte:

%Vor%

Ländercode-Suchvorgänge verwenden dann die Eigenschaft byCC :

%Vor%

Also, da sind Sie, eine Reihe von Optionen:

  • Ein Array (Suche nach numerischem Index, nicht nach Ländercode; dies wird durch andere Antworten abgedeckt, oder lasst einfach die kreuzindizierende Schleife oben stehen)
  • Eine Karte (Suche nach Ländercode, nicht nach numerischem Index)
  • Ein Array mit zusätzlichen Eigenschaften (siehe numerischen Index oder Ländercode)
  • Ein Array mit einer separaten byCC -Eigenschaft, nur um uns alle gesund zu halten

Glückliche Kodierung.

    
T.J. Crowder 27.03.2010, 15:50
quelle
4

Sie können javascriptähnliche Objekte verwenden ...

Zur Vereinfachung können Sie JSON (plain javascript)

verwenden %Vor%

dann ist ibans.countries ein Array mit allen Ländern ... ibans.countries [1] .name wird Belgie sein usw. ...

    
GorillaApe 27.03.2010 15:49
quelle
1

Sie könnten ein Array mit assoziativen Arrays verwenden.

%Vor%

Sie können das JSON-Format Ссылка ausprobieren.

Zum Beispiel druckt variable(countries[0]["countryname"]); "Andorra" aus.

    
TK. 27.03.2010 15:50
quelle

Tags und Links