2016-12-28 79 views
0

我有一個對象「測試」:改變位置的JavaScript

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"} 
     } 
    ] 
}; 

據「id_above值」(id_above和id應該是相同的,如果沒有,我必須移動它下右單元),我希望得到這樣的:

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"} 
     } 
     ] 
    } 
    ] 
} 

我想:

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 
    } }}} } } } 

的問題是,我的變量o是 '未定義',我想要做的事情之後像這樣:

test.sub=a;   

你能幫我嗎?謝謝。

回答

7

不能容易地使用JavaScript對象訂購容器。相反,使用數組。

儘管JavaScript對象屬性現在有一個訂單(或者某些操作就像對象屬性現在有訂單一樣,具體取決於您想如何查看它),但這是一件新事物(截至ES2015)而且這個命令很難合作。值得注意的是,for-in聲明支持屬性訂單而不是Object.keys也不支持。一些新的操作如Object.getOwnPropertyNames確實支持新訂單。

當您需要訂單時,請使用數組。

+0

對不起,英語不是我的母語。如果我明白了,你告訴我將'test'轉換爲數組? – John

+0

@John:是的,確切的。 –