2016-12-28 2 views
0

ich ein Objekt ‚test‘ haben:Position ändern von Array in JavaScript-Objekt

var test={ 
    "unit3":[ 
     { 
     "chapter":{ 
      "id":4, 
      "name":"earth", 
      "id_above":2 
     } 
     }, 
     { 
     "book":{"name":"earth"} 
     } 
    ], 
    "unit4":[ 
     { 
     "chapter":{ 
      "id":5, 
      "name":"water", 
      "id_above":2 
     } 
     }, 
     { 
     "book":{"name":"sea"} 
     } 
    ], 
    "unit1":[ 
     { 
     "chapter":{ 
      "id":2, 
      "name":"biology", 
      "id_above":2 
     } 
     }, 
     { 
     "book":{"name":"science"} 
     } 
    ] 
}; 

Nach ‚id_above Wert‘ (id_above und id sollte gleich sein, wenn nicht, ich habe es unter der rechts bewegen

var hope={ 
    "unit1":[ 
    { 
     "chapter":{ 
     "id":2, 
     "name":"biology", 
     "id_above":2 
     } 
    }, 
    { 
     "book":{"name":"science"} 
    } 
    ], 
    "sub":[ 
    { 
     "unit3":[ 
     { 
      "chapter":{ 
      "id":4, 
      "name":"earth", 
      "id_above":2 
      } 
     }, 
     { 
      "book":{"name":"earth"} 
     } 
     ], 
     "unit4":[ 
     { 
      "chapter":{ 
      "id":5, 
      "name":"water", 
      "id_above":2 
      } 
     }, 
     { 
      "book":{"name":"sea"} 
     } 
     ] 
    } 
    ] 
} 

ich habe versucht: Einheit), würde ich dies bekommen

for (var key in test){ 
    if(test.hasOwnProperty(key)){ 
    for (var i =0;i<test[key].length;i++){ 
    if (test[key][i].chapter.id!=test[key][i].chapter.id_above){ 


    for (var key2 in test){ 
    if(test.hasOwnProperty(key2)){ 
    for (var j =0;j<test[key2].length;j++){ 
    var o=_.find(test[key2][j].chapter,{id:test[key][i].chapter.id_above}) 
    console.log("o",o); //undefined 
    } }}} } } } 

Das Problem ist, dass mein Variable o 'undefined' ist, ich möchte nach etwas tun wie:

test.sub=a;   

Könnten Sie mir bitte helfen? Vielen Dank.

Antwort

7

Sie können nicht ohne weiteres JavaScript-Objekte verwenden, wie bestellt Container. Verwenden Sie stattdessen ein Array.

Es stimmt zwar, dass JavaScript-Objekteigenschaften jetzt eine Reihenfolge haben (oder dass einige Operationen so funktionieren, als hätten Objekteigenschaften jetzt eine Reihenfolge, je nachdem, wie Sie sie betrachten möchten). Das ist neu (ab ES2015) und mit dieser Reihenfolge ist schwer zu arbeiten. Bemerkenswerterweise tut die for-in Anweisung nicht Unterstützung Eigenschaft Reihenfolge, noch tut Object.keys. Einige neue Operationen wie Object.getOwnPropertyNames unterstützen die neue Bestellung.

Wenn Sie eine Bestellung wünschen, verwenden Sie ein Array.

+0

Sorry, Englisch ist nicht meine Muttersprache. Wenn ich es verstehe, sagen Sie mir, dass ich Test in ein Array umwandeln soll? – John

+0

@John: Ja, genau. –