JavaScript Array sort()メソッド に従って配列をソートしています。 compareFunction
パラメーターを使用すると、Internet Explorer11が正しく並べ替えられません。
私は選手とのチーム配列を持っています。これらのプレーヤーには名前があります。
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を使用していて、自分のcompareFunction
を使用したときのsort()関数がIE11で正しく機能しないため、SarahよりもWaldoが最初に表示され、ファンが混乱することです。
私はそれを再現できる プランカー を作成しました:
すべてのブラウザのsort()を解決するアイデアはありますか?
ありがとう!
比較者が正しくないように見えます:
function(a, b){return a.name > b.name;}
これはtrue
またはfalse
を返しますが、順序に応じて-1
、0
、または1
を返す必要があります。
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>");
}
}