13

我正在按照JavaScript Array sort() Method 对数组进行排序。当我使用compareFunction参数时,Internet Explorer 11 没有正确排序。

我有一个包含球员的团队。这些球员有名字:

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

但我想在体育场视频板上按字母顺序显示它们。所以当 DOM 准备好时,我有一个列表来附加它们:

我的HTML

<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 上无法正常工作,所以 Waldo 比 Sarah 先显示,球迷们很困惑。

我创建了一个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;}

这将返回trueor false,而它应该返回-1, 0or1取决于顺序。

请参阅如何在 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 回答