array.sort()在带有compareFunction的IE 11中不起作用

Mar*_*ero 9 javascript sorting internet-explorer plunker internet-explorer-11

我正在按照JavaScript Array sort()方法对数组进行排序.当我使用compareFunction参数时,Internet Explorer 11未正确排序.

我有一个球员阵容与球员.这些球员有名字:

var team = [
  {name:"Waldo"}, 
  {name:"Sarah"}
  ];
Run Code Online (Sandbox Code Playgroud)

但是我希望按照字母顺序在体育场视频板上显示它们.所以我有一个列表,可以在DOM准备就绪时附加它们:

MYHTML

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

      </ul>
Run Code Online (Sandbox Code Playgroud)

我的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>" );
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是有些俱乐部在他们的体育馆使用Internet Explorer 11,而当我使用自己的时候排序()功能compareFunction在IE11上工作不正常,所以Waldo首先显示的比Sarah还要让粉丝感到困惑.

我创建了一个Plunker,您可以在其中重现它:

  • Firefox 33.1 - 工作!! :)
  • Chrome 39.0.2171.65 - 工作!! :)
  • Internet Explorer 11.0.9600 - 不工作:(

有没有想过解决每个浏览器的sort()?

谢谢!

Kos*_*Kos 29

您的比较器看起来不正确:

function(a, b){return a.name > b.name;}
Run Code Online (Sandbox Code Playgroud)

这将返回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>");
  }
}
Run Code Online (Sandbox Code Playgroud)