array.sort()在带有compareFunction的IE 11中不起作用 [英] array.sort() does not work in IE 11 with compareFunction

查看:93
本文介绍了array.sort()在带有compareFunction的IE 11中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm sorting an array following JavaScript Array sort() Method. When I use a compareFunction parameter, Internet Explorer 11 is not sorting properly.

我有一个带有玩家的团队阵列。这些玩家有姓名:

I have a team array with players. These players have names:

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

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

But I want to display them at the stadium video board sort by alphabetical order. So I have a list to append them when the DOM is ready:

MyHtml

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

      </ul>

我的Javascript代码

My Javascript code

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上运行不正常,所以Waldo首先显示的比Sarah还要让粉丝感到困惑。

Problem is that some Clubs use Internet Explorer 11 at their stadiums, and sort() function when I use my own compareFunction is not working properly on IE11, so Waldo is displayed first than Sarah and the fans are confused.

我已经创建了 Plunker 可以重现它:

I've created a Plunker where you can reproduce it:


  • Firefox 33.1 - 工作!! :)

  • Chrome 39.0.2171.65 - 工作!! :)

  • Internet Explorer 11.0.9600 - 不工作:(

任何想法解决每个浏览器的sort()?

Any idea to resolve the sort() for every browser?

谢谢!

推荐答案

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

Your comparer looks incorrect:

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

这将返回 true false ,虽然它应该返回 -1 0 1 取决于订购。

This returns true or false, while it should return -1, 0 or 1 depending on the ordering.

参见如何在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>");
  }
}

这篇关于array.sort()在带有compareFunction的IE 11中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆