2013-11-09 5 views
0

내림차순으로 배열을 정렬하려고합니다.알 수없는 자바 스크립트 오류

이 내 현재 코드 :

for(var i = 0; i < scoresArray.length; i){ 
function swap(a, b) { 
      var temp = scoresArray[a].score; 
      scoresArray[a] = scoresArray[b].score; 
      scoresArray[b] = temp; 
} 
    for(var x = 0; x < scoresArray.length; x++){ 
     if(scoresArray[x].score < scoresArray[++x].score){ 
      console.log(x); 
      swap(x, ++x); 
     } 
    } 
} 
return scoresArray.content; 

이 입력 배열이다

[ 
    { url: 'www.lboro.ac.uk', score: 6 }, 
    { url: 'www.xyz.ac.uk', score: 3 }, 
    { url: 'www', score: 8 } ] 

이 (있어야) 출력 배열 :

[{ url: 'www.xyz.ac.uk', score: 3 }, 
    { url: 'www.lboro.ac.uk', score: 6 }, 
    { url: 'www', score: 8 } ] 
+4

[에 Array.sort (때 compareFunction)] (HTTPS를 사용하여 : //developer.mozilla합니다. org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)를 사용하면이 작업을보다 쉽게 ​​수행 할 수 있습니다. – Douglas

+1

무엇을 소트하고 싶습니까? 점수 또는 URL? u는 내림차순으로 언급했습니다 ... 점수는 ur 출력에서 ​​오름차순으로 나타납니다? – ajc

답변

2

추천 @Douglas했다 array.sort(compareFunction)을 사용하면 다음을보다 쉽게 ​​할 수 있습니다.

var scoresArray = [ 
    { url: 'www.lboro.ac.uk', score: 6 }, 
    { url: 'www.xyz.ac.uk', score: 3 }, 
    { url: 'www', score: 8 } ]; 
scoresArray.sort(function(a,b) { 
    return a.score - b.score; 
}); 

scoresArray[i].score은 숫자이므로 return a.score - b.score을 사용할 수 있습니다. 보다 일반적인 경우 (그들은 문자열했다 예를 들어, 경우)에, 당신은 스왑 기능이 작동하지 않습니다

scoresArray.sort(function(a,b) { 
    if(a.score > b.score) return 1; 
    if(a.score < b.score) return -1; 
    return 0; 
}); 
+2

'.sort' 함수는 역 정렬을하기 위해'return b.score - a.score;'일 수 있습니다. 'if' 문은 필요 없습니다. – jfriend00

1

, 그것은 단지 점수 번호를 scoresArray의 값을 대체 사용할 수 있습니다. ++xx의 값을 변경한다는 것을 아는 것도 중요합니다. 대신 x + 1을 의미한다고 생각합니다.

var scoresArray = [ 
    { url: 'www.lboro.ac.uk', score: 6 }, 
    { url: 'www.xyz.ac.uk', score: 3 }, 
    { url: 'www', score: 8 } ]; 

function swap(a, b) { 
    var temp = scoresArray[a]; 
    scoresArray[a] = scoresArray[b]; 
    scoresArray[b] = temp; 
} 

for(var i = 0; i < scoresArray.length; i++) { 
    for(var x = 0; x < scoresArray.length - 1; x++) { 
     if (scoresArray[x].score > scoresArray[x + 1].score) { 
      swap(x, x + 1); 
     } 
    } 
} 

console.log(scoresArray); 

그러나 경우에 Array.sort 사용하는 것이 좋을 것이다 :

이 거의 작동

var scoresArray = [ 
    { url: 'www.lboro.ac.uk', score: 6 }, 
    { url: 'www.xyz.ac.uk', score: 3 }, 
    { url: 'www', score: 8 } ]; 

scoresArray.sort(function(a, b) { 
    return b.score - a.score; 
}); 

console.log(scoresArray); 
+2

.sort 함수는'return b.score - a.score;'일 수 있습니다. 역순 정렬을 얻을 수 있습니다. 'if' 문은 필요 없습니다. – jfriend00

+0

@ jfriend00, 네, 좋은 제안입니다. 답변을 업데이트했습니다. – Douglas