Frage an javascript, jquery, json – Hinzufügen eines Elements zum oberen Rand eines JSON-Objekts

7

Ich habe ein JSON-Objekt, das beim Laden der Seite initiiert wird:

data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;

Gibt es eine Möglichkeit, ein Element vor dem ersten zu injizierenfoo Element, so dass bei der Ausführung einesfor var i in datawird das neue Element vor den Elementen durchlaufen, die beim Initiieren des Objekts hinzugefügt wurden?

Der Grund dafür ist, dass dem Benutzer einige Elemente angezeigt werden. Wenn der Benutzer einen neuen Artikel über Javascript hinzufügt, möchte ich, dass dieser neue Artikel über allen vorhandenen Artikeln angezeigt wird, jedoch, wenn ich den neuen Artikel hinzufüge, d. H

data[newItem] = newItem;

Dann sieht das JSON-Objekt folgendermaßen aus:

data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
data[newItem] = newItem;

Anstatt wie ich will, was ist:

data[newItem] = newItem;
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;

Irgendwelche Ideen?

dieses Thema ist wahrscheinlich relevant. Nämlich der Teil, der sagt: Wenn die Reihenfolge relevant ist,Verwenden Sie ein Array. James Holmes

Deine Antwort

6   die antwort
3

const newObject = Object.assign({first: value}, oldObject)

Wie bereits erwähnt, ist die Bestellung nicht garantiert, aber für mich ist das gut genug. :)

-3

Sie können es in einen String konvertieren, Ihre Daten am Anfang des Strings anhängen und den String mit "eval" wieder in json konvertieren.

ok, ich werde es von nun an benutzen, vielen Dank! Samir Adel
Anstatteval du hättest es gebrauchen könnenJSON.parse. user405398
Bitte recherchieren Sie, warum Sie eval nicht verwenden sollten. Dann überlege dir, warum du keine Objekte in Strings umwandeln solltest und wieder zurück ... Incognito
Ich würde gerne von Ihnen lernen, warum ich das nicht tun sollte ?! Samir Adel
3

ein Element vor dem ersten foo-Element zu injizieren?

Was im Array an erster Stelle steht:

window.object oder window.alert?

Objekte haben auch keine Reihenfolge. Wenn Sie ein Array möchten, verwenden Sie ein Array. Objekte sind keine Arrays.

Falls Sie es wollen

var ThingsInOrder = [
  FirstThing,
  SecondThing,
  ThirdThing
];
ThingsInOrder.push(ForthThing);

Verwenden Sie ein Array.

Falls Sie es wollen:

var ThingsNeverInOrder = {
  Window,
  Alert,
  Derp,
  Herp
};

ThingsNeverInOrder.foo = bar;

Verwenden Sie ein Objekt.

8

Joseph der Träumer'sAntwortenIch habe ein paar schnelle Überprüfungen in Firefox & Chrome durchgeführt.

Feuerfuchs:

var obj = {};

obj.a = 'a';
obj.c = 'c';
obj.b = 'b';
obj['0'] = '0';

for(var i in obj){
    console.log(i);
}

//prints:
a
c
b
0

Chrom:

var obj = {};

obj.a = 'a';
obj.c = 'c';
obj.b = 'b';
obj['0'] = '0';

for(var i in obj){
    console.log(i);
}

//prints:
0
a
c
b
0

können Sie ein neues Objekt erstellen und die Eigenschaften in der gewünschten Reihenfolge anordnen. Beispiel:

var objj1 = {name:'viru',lastname:'nehra'};

Erstellen Sie also ein neues Objekt mit einer neuen Eigenschaft, die Sie oben haben möchten:

var obj2 = {age: 21}

und der Lauf:

for(var key in objj1){
   obj2[key] = objj1[key]
}

obj2 = {age: 21, name: "viru", lastname: "nehra"}
14

lbst wenn sie in der JSON-Zeichenfolge angeordnet sind und als JS-Objekt analysiert werden, können Sie daher niemals vorhersagen, in welcher Reihenfolge sie angezeigt werden.

Verwenden Sie stattdessen besser Arrays. Du könntest das benutzenunshift() Methode, um das Element in den ersten Index zu setzen.

var data = [bar,bar2,bar3];

data.unshift(newItem);

//data = [newItem,bar,bar2,bar3];
@ClickUpvoteArray.unshift() Siehe meine Antwort. Arrays habeneine Vielzahl von Manipulationsmethoden Sie können gerne verwendenpush zum ende hinzufügen,pop das Ende zu entfernen,shift das erste entfernen etc. Joseph
Keine Option, ich habe es bereits als Objekt codiert. Ich werde es in einer Unmenge von Orten ändern müssen, um ein Array zu verwenden. Was ist ein Weg, um es als Objekt arbeiten zu lassen? Click Upvote
@Click Upvote Sie können ein Array-ähnliches Objekt verwenden.var arr = []; arr.foo = 'bar'; Das einzige ist, dass Sie nicht darauf zugreifen könnenfoo in einemfor(var i = 0; i < arr.length; i++){...}. Ihr vorhandener Code kann also identisch sein. Sie können immer noch darauf zugreifenfor(var key in data){...} Schleife, auch wenn Sie Ihre änderndata = []. user405398
Es gibt also keine Möglichkeit, sie zu verwendendata["foo"] Ich frage mich, ob es Bibliotheken gibt, die Pythons OrderedDict in JavaScript simulieren wong2

Verwandte Fragen