2016-12-02 2 views
2

Ich habe ein Objekt.JavaScript - Einfügen und Entfernen eines Elements in Objekt

var dl_items; 

Nach einer Schleife für inputing Daten:

dl_items[code] = itemObject; 

Ich habe ein Array:

dl_items : { 
      "code_A" : { "index" : 1, "status" : 2, "name" : A_data}, 
      "code_B" : { "index" : 2, "status" : 0, "name" : B_data}, 
      "code_C" : { "index" : 3, "status" : 1, "name" : C_data}, 
      "code_D" : { "index" : 4, "status" : 2, "name" : D_data}, 
      "code_E" : { "index" : 5, "status" : 4, "name" : E_data} 
      } 

Jetzt möchte ich "dl_items [code_D]" und legen Sie sie in nach "entfernen code_A "(Index 2) für Ergebnis wie:

dl_items : { 
      "code_A" : { "index" : 1, "status" : 2, "name" : A_data}, 
      "code_D" : { "index" : 4, "status" : 2, "name" : D_data}, 
      "code_B" : { "index" : 2, "status" : 0, "name" : B_data}, 
      "code_C" : { "index" : 3, "status" : 1, "name" : C_data},     
      "code_E" : { "index" : 5, "status" : 4, "name" : E_data} 
      } 

Ich versuche, „löschen“ zu verwenden, nachdem eine Schleife finden Index code_D mit:

delete dl_items[code_D]; 

und es erfolgreich entfernt, aber wie kann ich code_D in seinem neuen Index einfügen?

Edit: Danke allen, die mir helfen, mehr über Array zu verstehen.

+1

Im Grunde zeigen Sie ein Objekt mit Objekten. Eigenschaften in Objekten haben eigentlich keine Reihenfolge. Sie könnten ein Array für bestellte Artikel verwenden. –

+2

Das ist weder [JSON] (https://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal-notation) noch ein [array] (https: // developer .mozilla.org/de-DE/docs/Web/JavaScript/Referenz/Global_Objects/Array). 'dl_items' ist ein [Objekt] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) – Andreas

+0

Bitte korrigieren Sie Ihr Array –

Antwort

0

Da Objekt keinen Auftrag haben, müssen Sie Ihre aktuelle Implementierung in ein Array konvertieren:

var dl_items = []; 

Wenn Sie benötigen ein Element in dem Array hinzufügen:

dl_items.push({ code: code, item: itemObject }); 

Jetzt, Die ähnlichen Daten wie Array von Ihrer Frage ist:

dl_items: [ 
      { code :"code_A", item: { index: 1, status: 2, name: "A_data" } }, 
      { code :"code_B", item: { index: 2, status: 0, name: "B_data" } }, 
      { code :"code_C", item: { index: 3, status: 1, name: "C_data" } }, 
      { code :"code_D", item: { index: 4, status: 2, name: "D_data" } }, 
      { code :"code_E", item: { index: 5, status: 3, name: "E_data" } }, 
      ] 

Um den Eintrag mit Code zu verschieben _D nach der Eingabe mit code_A, verwenden Sie Folgendes:

var codeDEntry = dl_items[3]; 
dl_items = dl_items 
    .filter(function(entry) { 
     return entry !== codeDEntry; 
    }) 
    .splice(1, 0, codeDEntry); 

Hoffe, das hilft!

+0

Kann ich fragen, warum Sie "Unshift" benutzt haben? In W3School heißt es, dass "Verschiebung" verwendet wird, um ein Element am Anfang des Arrays hinzuzufügen. Und ich denke, Ihr neues Array wird sein: D, A, B, C, E? Bitte korrigieren Sie mich, wenn ich falsch lag: D –

+0

Entschuldigung, Sie haben völlig Recht. Ich habe die Frage nicht richtig gelesen. Ich habe meine Antwort korrigiert. – Naor

+0

Danke. Jetzt werde ich die Struktur meines Codes umstrukturieren: D –

0

Sie können eine temporäre var wie diese machen:

tempItem = dl_items.code_D; 
dl_items.code_D = dl_items.code_B; 
dl_items.code_B = tempItem; 
0

Was Sie hier haben, ist ein Objekt, kein Array. Daher gibt es hier kein Konzept für einen Index. Sie können Ihre Objektschlüssel in ein Array Karte wie folgt:

let array = Object.keys(dl_items); 

Sie können dann ihre Positionen neu anordnen.

Verwandte Themen