2017-05-22 5 views
0

hi all, obj {} soll als Objekt deklariert worden sein, aber warum putting [] und obj als Array verwenden? DankeJavaScript-Objekt als Array verwenden

+0

Ohne eine langatmige Antwort zu geben. Schauen Sie sich diese Seite an, damit Sie JS besser verstehen können. Es tat für mich .. https://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript – Tony

+0

Was meinst du mit "funktioniert"? Was ist das erwartete Ergebnis? Warum sollte es nicht funktionieren? Arrays sind auch nur Objekte mit Schlüssel/Wert-Paaren. Sie verwenden Arrays für numerische Indizes. – Xufox

+0

https://stackoverflow.com/questions/4968406/javascript-property-access-dot-notation-vs-brackets – baao

Antwort

1

Zunächst einmal lassen Sie uns Ihre removedDupes Funktion beheben, indem intArray als Argument hinzugefügt und erklärt die Schleife Iteratoren als lokale Variablen var x:

function removeDupes(intArray) { 
    var out = [], 
     obj = {}; 

    for (var x = 0; x < intArray.length; x++) { 
    obj[intArray[x]] = 1; 
    } 
    for (var x in obj) { 
    out.push(x); 
    } 
    return out; 
} 

Die erste Schleife iteriert über alle intArray Elemente. Für jedes Element erstellt es eine neue Eigenschaft unter obj mit Schlüssel intArray[x] und Wert 1 über obj[intArray[x]] = 1. Dies wird bracket notation genannt. Jetzt können Objekte keine doppelten Schlüssel haben. Wenn Sie denselben Eigenschaftenschlüssel zweimal hinzufügen, wird die zuvor hinzugefügte Eigenschaft überschrieben. Wenn die Schleife abgeschlossen ist, hat also Ihre obj genau einen Schlüssel pro eindeutiges Array-Element.

Die zweite Schleife schiebt dann diese Schlüssel in das resultierende out Array.

Es gibt einige Probleme mit Ihrer removeDupes Funktion. Erstens gibt es ein Array von string Elementen zurück, obwohl die Eingabe ein Array von number Elementen ist. Dies liegt daran, dass obj Schlüssel keine Zahlen sein können und immer in Zeichenfolgen konvertiert werden. Sie können das Problem beheben, indem Sie die numerischen Werte zusammen mit den Tasten Speicher wie folgt:

function removeDupes(intArray) { 
    var out = [], 
     obj = {}; 

    for (var x = 0; x < intArray.length; x++) { 
    obj[intArray[x]] = intArray[x]; 
    } 
    for (var x in obj) { 
    out.push(obj[x]); 
    } 
    return out; 
} 

Nun, dies funktioniert, aber es ist sehr ausführlich. Sie können es kürzer machen, indem Sie die zweite Schleife durch ersetzen. Oder noch kürzer bei Verwendung eines Set:

function removeDupes(intArray) { 
    return [...new Set(intArray)]; 
} 
4

someObject["somePropertyName"] ist, wie Sie auf die Eigenschaft eines Objekts zugreifen. (Sie können auch someObject.somePropertyName verwenden, aber nur, wenn der Name der Eigenschaft ein gültiger Bezeichner ist).

Die Syntax hat nichts speziell mit Arrays zu tun.

Arrays sind nur ein Objekttyp mit einer Reihe von Methoden, die Eigenschaftsnamen behandeln, die ganzzahlige Zahlen sind.

(Zahlen sind keine gültigen Bezeichner, daher müssen Sie die eckige Klammer verwenden, um auf Eigenschaften mit Namen zuzugreifen, die Zahlen sind).

Verwandte Themen