2011-10-12 68 views
2

對於如何解決這類問題,我完全陷入困境並留下空白。
JS對象在JavaScript中對嵌套數組進行排序

o={"items":[ 
    {"name":"Name 1","types":[ 
     {"type":"Type 4","subtype":"Sub a"} 
    ]}, 
    {"name":"Name 2","types":[]}, 
    {"name":"Name 3","types":[ 
     {"type":"Type 1","subtype":"Sub x"} 
    ]} 
]} 

我想按類型排序,沿o.sortByType東西線();

Array.prototype.sortByType = function(){ 
    this.sort(function(a,b) { 
     var ap = a[types][type], bp = b[types][type]; 
     if(ap!=undefined||bp!=undefined){ 
      if (ap < bp) {return -1;} 
      if (ap > bp) {return 1;} 
     }else{ 
      return 0; 
     } 
    }) 
return this; 
} 

我試圖得到重新有序排列:
項目:
名稱3,
名稱1,
名稱這裏使用2

排序功能,適用於任何非項目對象的內在屬性。
如果我在排序中使用[types] [type],它會返回錯誤,「types」沒有定義。
如果我使用a.types.type,它只是返回未修改的數組。
就像我說的,我很可怕地卡住了,任何幫助或指針將不勝感激。

+0

你的分揀條件是什麼?你想通過它的「類型」對數組進行排序嗎? – styrr

回答

1

我假設你想通過使用類型作爲關鍵字排序你的數組。這是解決方案:

o.items.sort(function(a,b){ 
    if(a.types.length == 0 || b.types.length == 0) { 
     return b.types.length - a.types.length; 
    } 
    return a.types[0].type.localeCompare(b.types[0].type); 
}); 

這是example

+0

這太酷了! **謝謝**!!!我從來沒有使用'localeCompare',但在我們說話時閱讀它。再次謝謝你! – Vuk

+0

我很高興我可以幫助:) – styrr