2014-01-09 1 views
0

데이터 배열의 배열과 일치하는 포인트 배열이 있습니다. 임 사용빠른 정렬시 ID 트랙을 유지하는 쉬운 방법

 points = [[2,3.5], [1,2.7], [5,2.21], [2,351]]; 
    dataID = [1, 2, 3, 4]; 

JavaScript로 퀵 기능은 다음과 같습니다 (내 자신과 함께 다음 X가 Y를 비교 기능, 작품 비교) 나는 새로운 순서를 알 필요가

quicksortbyXthenY: function(array){ 
    if(array.length <= 1) return array; 
    var pivot = array.splice(Math.round(array.length/2),1)[0]; 
    var lower = greater = []; 
    jQuery.each(array, function() { 
     if(compare(this, pivot)>=0){ 
      lower.push(this); 
     }else{ 
      greater.push(this); 
     } 
    }); 
    return (quicksortbyXthenY(lower).concat([pivot])).concat(quicksortbyXthenY(greater)); 

을 즉 새로운 점의 순서와 정확히 일치하는 데이터 ID의 업데이트 된 배열.

이것을 구현하는 가장 쉬운 방법은 무엇입니까?

+1

를? '{{id : 1, p : [2,3,5]}, {id : 2, p : [1,2.7]}, ...]'- 또는'[{id : 1, x : 2, y : 3.5}, ...]'. – nnnnnn

+0

왜 네이티브'sort' 메서드 대신에 스스로 quicksort를 구현하고 있습니까? 너의 것이 훨씬 덜 효율적 인 것 같다. 또한 나는'byXthenY'가 의미하는 것을 보지 못합니다. – Bergi

답변

1

새로운 점 순서, 즉 새로운 점 순서와 일치하는 데이터 ID의 업데이트 된 배열을 알아야합니다.

배열에게 자신의 ID를 부여하고 그들이 다음 정렬 된 배열에서 ID를 추출 분류 : 당신은 두 개의 분리 된 배열 대신 객체의 단일 배열을 사용하는 이유는

for (var i=0; i<points.length; i++) 
    points[i].dataID = dataIDs[i]; 
points.sort(compare); 
for (var i=0; i<points.length; i++) 
    dataIDs[i] = points[i].dataID; 
+0

완벽, 내가 찾고있는 것만 큼 쉽지 않았습니다. – Malin

관련 문제