964 Stimmen

Garantiert JavaScript die Reihenfolge der Objekteigenschaften?

Wenn ich ein Objekt wie dieses erstelle:

var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";

Wird das resultierende Objekt immer so aussehen?

{ prop1 : "Foo", prop2 : "Bar" }

Das heißt, werden die Eigenschaften in der gleichen Reihenfolge angezeigt, in der ich sie hinzugefügt habe?

2 Stimmen

5 Stimmen

5voto

Ajay Gangarde Punkte 141

Hauptunterschied zwischen Objekt und MAP mit Beispiel :

es ist die Reihenfolge der Iteration in der Schleife, in Map folgt sie der Reihenfolge, wie sie bei der Erstellung festgelegt wurde, während sie in OBJECT nicht gilt.

SEE: OBJEKT

const obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
obj['1'] = "day";
console.log(obj)

**OUTPUT: {1: "day", prop1: "Foo", prop2: "Bar"}**

MAP

    const myMap = new Map()
    // setting the values
    myMap.set("foo", "value associated with 'a string'")
    myMap.set("Bar", 'value associated with keyObj')
    myMap.set("1", 'value associated with keyFunc')

OUTPUT:
**1.    0: Array[2]
1.   0: "foo"
2.   1: "value associated with 'a string'"
2.  1: Array[2]
1.   0: "Bar"
2.   1: "value associated with keyObj"
3.  2: Array[2]
1.   0: "1"
2.   1: "value associated with keyFunc"**

6 Stimmen

Der noch immer die var im Jahr 2020?

1 Stimmen

let ist nicht neu var

2voto

keth-tex Punkte 153

Für eine 100% ausfallsichere Lösung könnten Sie verschachtelte Objekte verwenden und etwas wie folgt tun:

const obj = {};
obj.prop1 = {content: "Foo", index: 0};
obj.prop2 = {content: "Bar", index: 1};

for (let i = 0; i < Object.keys(obj).length; i++)
for (const prop in obj) {
    if (obj[prop].index == i) {
        console.log(obj[prop].content);
        break;
    }
}

3 Stimmen

Dies ist O(n^2), wahrscheinlich keine gute Lösung.

0 Stimmen

@MarkFisher Ich denke, das ist der Preis für die Ausfallsicherheit. Allerdings war hier noch eine Optimierung möglich: Ich habe eine "Pause" eingefügt. Jetzt ist es ca. (n^2)/2.

1 Stimmen

Ich sehe keine Notwendigkeit für einen Kompromiss bei der Leistung. Inwiefern ist beispielsweise die Lösung von Drew Durham, mit der man das Gleiche wie hier in O(n) erreichen könnte, nicht ausfallsicher? Auch O(n^2 / 2) ist immer noch O(n^2).

-7voto

Kevin Lacquement Punkte 4951

Von der JSON-Standard :

Ein Objekt ist ein ungeordnet Sammlung von null oder mehr Name/Wert-Paaren, wobei ein Name eine Zeichenkette und ein Wert eine Zeichenkette, eine Zahl, ein boolescher Wert, null, ein Objekt oder ein Array ist.

(Hervorhebung von mir).

Also, nein, Sie können die Bestellung nicht garantieren.

8 Stimmen

Dies wird durch den ECMAScript-Standard festgelegt - nicht durch die JSON-Spezifikation.

7 Stimmen

@Alnitak, @Iacqui: JSON übernimmt dies nur aus der ECMAScript-Spezifikation. Es ist auch für JSON spezifiziert, aber das bezieht sich nicht wirklich auf die Frage.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X