2011-10-12 67 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