2011-10-12 5 views
2

이 정렬 문제를 해결하는 방법에 대해서는 완전히 고착되어 있습니다.
JS 내가, 유형 o.sortByType의 라인을 따라 뭔가를() 정렬하려고 해요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"} 
    ]} 
]} 

객체;
항목 :
이름 3,
이름 1,
이름 여기에 사용 된 2

정렬 기능이 비 작동 내가 다시 주문 배열을 얻으려고

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

item 객체의 중첩 된 속성입니다.
정렬에서 [유형] [유형]을 사용하면 오류가 반환되고 "유형"은 정의되지 않습니다.
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