2014-09-02 3 views
2

나는 쌍 배열을 포함하는 배열을 가지고 있습니다. 다음과 같습니다배열 다차원 배열 - 배열 (객체 아님)

[[Jack],[1]], 
[[Larry],[0]], 
[[Veronica],[0]], 
[[Sam],[1]], 
[[Bob],[0]], 
[[David],[1]] 

I, 그것은 다음과 같아야들이 알파벳 순으로 알파벳 순으로 분류되어 있지만, 1의 값을 모든 사람이 분류 한 후

먼저 그렇게 분류해야

[[David],[1]] 
[[Jack],[1]], 
[[Sam],[1]], 
[[Bob],[0]], 
[[Larry],[0]], 
[[Veronica],[0]], 

나는이 두 가지 정렬 함수를 모두 가지고 있지만 그것들을 결합해야합니다. 그것들을 하나씩 넣는 것은 정렬을 엉망으로 만든다.

q.sort(function(a, b){ //sort alphabetically 
     if(a[0].toLowerCase() < b[0].toLowerCase()){ 
      return -1; 
     }else if(a[0].toLowerCase() > b[0].toLowerCase()){ 
      return 1; 
     }else{ 
      return 0; 
     } 
    }); 

q.sort(function(a, b){return b[1] - a[1]}); //sort value 1/0 
+2

당신이 생각하는대로 배열과 객체 사이에 많은 차이가 없습니다. – Bergi

+0

많은 이름과 많은 숫자가 있습니다. 나는 단지 처리 시간을 절약하려고 노력했을 뿐이었다. –

+0

코드를 중간에 최적화하지 마십시오. 대신 JSON 객체를 사용하는 것이 좋습니다. 훨씬 더 명확 해지며 정렬 비교 함수의 쓰기가 쉬워집니다. – kevin628

답변

1

어때?

b.sort(function(a, b) { 
    if (a[1] == 1 && b[1] == 0) return -1; 
    if (a[1] == 0 && b[1] == 1) return 1; 
    if(a[0].toLowerCase() < b[0].toLowerCase()){ 
     return -1; 
    }else if(a[0].toLowerCase() > b[0].toLowerCase()){ 
     return 1; 
    }else{ 
     return 0; 
    }}); 
+0

조금 수정하려고합니다 ... 확실히 나오지 않습니다 ... 확실하지 않습니다. Gimmie a sec. –

+0

내가보기에는 위 그림을 추가했습니다. –

+1

제게는 효과가있는 것처럼 보였습니다. 유일한 차이점은 배열의 제 3 번째 배열이 아니라는 것입니다. x = [[David ", 1], [Jack", 1], [Sam ", [1]], ["Larry ", 0], ["Bob ", 0], ["Veronica " , 0]]' – Shriike

3

더 우아한 용액 :

q.sort(function (a, b) { 
    return b[1] - a[1] || a[0].localeCompare(b[0]); 
}); 

설명 :

  1. b[1] - a[1] :이 두 번째 함수의 표현이다; 0 (falsy)이면 표현식의 두 번째 부분이 평가됩니다.
  2. a[0].localeCompare(b[0]) : localeCompare()은 첫 번째 기능 (더하기 로케일 지원)과 유사하게 작동합니다.
+0

이것을 확인해주십시오 ... 컴팩트도 같음 –

+0

좋아, 열중합니다. –

0

사용이 :

b.sort(function(a, b) { 
    if (a[1] == 1 && b[1] == 1 || a[1] == 0 && b[1] == 0) { 
     if (a[0].toLowerCase() < b[0].toLowerCase()) { 
      return -1; 
     } else if (a[0].toLowerCase() > b[0].toLowerCase()) { 
      return 1; 
     } 
    } else if (a[1] == 1 && b[1] == 0 || a[1] == 0 && b[1] == 1) { 
     return a[1] - b[1]; 
    } 
}); 
+2

세 번째'return'을위한 조건이 필요 없습니다. – Pavlo