2014-01-31 2 views
0

배열 배열이 generationArray입니다. 생성 배열 내부의 각 배열은 252 개 위치의 배열입니다. 처음 250 개의 위치는 내부 코드이며 마지막 두 위치는 내 정렬 기준을 나타냅니다. 배열의 마지막 위치는 boolean이고, 앞에있는 숫자는 숫자입니다.배열의 복잡한 자바 스크립트 배열을 정렬하는 방법?

이 배열은 true 또는 false 값을 먼저 주문해야합니다. 숫자 값은 generationArray입니다. 마지막 위치가 더 큰 수의 순서대로 참이면, 마지막 위치가 거짓이면 작은 수의 순서로 먼저 정렬하십시오.

이 예는 generationArray에 5 개의 어레이가 있다고 가정합니다.

generationArray[0][last] == false 
generationArray[0][last-1] == 350 

generationArray[1][last] == true 
generationArray[1][last-1] == 300 

generationArray[2][last] == true 
generationArray[2][last-1] == 250 

generationArray[3][last] == false 
generationArray[3][last-1] == 380 

generationArray[4][last] == true 
generationArray[4][last-1] == 290 

그것은 것 어떻게 자바 스크립트에서이 일을 달성 할

generationArray[0][last] == true 
generationArray[0][last-1] == 300 

generationArray[1][last] == true 
generationArray[1][last-1] == 290 

generationArray[2][last] == true 
generationArray[2][last-1] == 250 

generationArray[3][last] == false 
generationArray[3][last-1] == 350 

generationArray[4][last] == false 
generationArray[4][last-1] == 380 

같이 주문한다?

+0

항상 양수입니까? – Bergi

+0

예, 게임 타이머가 감소하므로 가능한 가장 낮은 값이 0입니다. – steps

답변

0

이 그것을 수행해야합니다

generationArray.sort(function(a, b) { 
    return b[251]-a[251] || (a[251]*2-1)*(b[250]-a[250]); 
}) 
  • b[251]-a[251]true의 그 0 결과 경우, ||
  • b[250]-a[250]
  • 을 평가됩니다 falses
  • 전에의 int로 논리 값을 캐스팅하고이를 비교 compares the ints 큰 값이 처음입니다.
  • 이지만 부울이 false 인 경우 (a[251]*2-1)*은 그 순서를 반전합니다.

당신의 숫자는 항상 긍정적 때문에, 어쩌면 일반적인/쉽게 이해할 수있는 솔루션은 누구 부울 동반자 부정적인 true입니다 번호를 치료하는 것입니다. 그 패턴을 사용하기 위해 단순히 데이터를 재구성 할 수도 있습니다. 그럼 당신이 할 일은 숫자 정렬입니다 :

generationArray.sort(function(a, b) { 
    return (a[251]?-a[250]:+a[250]) - (b[251]?-b[250]:+b[250]); 
}) 
관련 문제