2

JavaScript Array sort() Method 다음 배열을 정렬합니다. compareFunction 매개 변수를 사용하면 Internet Explorer 11이 제대로 정렬되지 않습니다.array.sort()는 compareFunction이있는 IE 11에서 작동하지 않습니다.

나는 선수들로 구성된 팀 배열을 가지고 있습니다. 이 플레이어의 이름은 다음과 같습니다.

var team = [ 
    {name:"Waldo"}, 
    {name:"Sarah"} 
    ]; 

하지만 스타디움 비디오 보드에서 알파벳순으로 표시하고 싶습니다.

MyHtml

<h2>My Team after sorting</h2> 
     <button onclick='sortAndDisplay()'>Click here to sort by Name</button> 
     <ul id="myTeamAfter"> 

     </ul> 

function sortAndDisplay(){ 
    $("#myTeamAfter").empty(); 
    team.sort(function(a, b){return a.name > b.name;}); 
    for(var i=0; i < team.length; i++){ 
    $("#myTeamAfter").append("<li>" + team[i].name + "</li>"); 
    } 
} 

문제는 일부 클럽들이 경기장에서 인터넷 익스플로러 11을 사용하는 것이 내 자바 스크립트 코드, 그리고 : 그래서 DOM이 준비가되면 그들을 추가 할 목록을 가지고 sort() 함수를 사용하면 compareFunction이 IE11에서 제대로 작동하지 않으므로 Waldo가 Sarah보다 먼저 표시되고 팬이 혼란 스럽습니다. 당신이 그것을 재현 할 수있는

나는 Plunker을 만들었습니다

  • 파이어 폭스 33.1 - 작업을! :)
  • 크롬 39.0.2171.65 - 작동 중! ?! :
  • 인터넷 익스플로러 11.0.9600 - 모든 브라우저의 정렬()을 해결하기 위해 :(

어떤 생각을 작동하지 않음은

감사

답변

16

귀하의 비교 자가 잘못 같습니다

function(a, b){return a.name > b.name;} 

이 값은 true 또는 false이고, -1,를 반환합니다. 주문에 따라또는 1.

How do you do string comparison in JavaScript? (특히 localeCompare)을 참조하십시오.

그래서 코드는 다음과 같아야합니다

function sortAndDisplay(){ 
    $("#myTeamAfter").empty(); 
    team.sort(function(a, b){ 
    if (a.name < b.name) 
     return -1; 
    if (a.name > b.name) 
     return 1; 
    return 0; 
    }); 
    for(var i=0; i < team.length; i++){ 
    $("#myTeamAfter").append("<li>" + team[i].name + "</li>"); 
    } 
} 
+0

들으 @Kos! 귀하의 답변을 작업 코드로 편집했습니다. –