13

JavaScript Array sort() Methodに従って配列をソートしています。パラメータを使用するとcompareFunction、Internet Explorer 11 が正しくソートされません。

私はプレイヤーと一緒にチーム配列を持っています。これらのプレーヤーの名前は次のとおりです。

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

しかし、私はそれらをスタジアムのビデオボードにアルファベット順に並べ替えて表示したいと考えています。したがって、DOM の準備ができたときにそれらを追加するリストがあります。

MyHtml

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

      </ul>

私のJavascriptコード

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>" );
  }
}

問題は、一部のクラブがスタジアムで Internet Explorer 11 を使用していて、私が使用するときの sort() 関数compareFunctionが IE11 で正しく動作しないため、Sarah よりも Waldo が最初に表示され、ファンが混乱していることです。

それを再現できるPlunkerを作成しました:

  • Firefox 33.1 - 動作中!! :)
  • Chrome 39.0.2171.65 - 動作中!! :)
  • Internet Explorer 11.0.9600 - 動作しません:(

すべてのブラウザの sort() を解決するアイデアはありますか?

ありがとう!

4

1 に答える 1

33

あなたの比較は間違っているようです:

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

これは または を返しますがtrue、順序によってはまたはをfalse返す必要があります。-101

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 (let i = 0; i < team.length; i++) {
    $("#myTeamAfter").append("<li>" + team[i].name + "</li>");
  }
}
于 2014-11-25T09:47:29.460 に答える