我正在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,而当我使用我自己的compareFunction
时,sort()函数在IE11上运行不正常,所以Waldo首先显示的比Sarah还要粉丝很困惑
我创建了一个Plunker,您可以在其中重现它:
是否有想法解决每个浏览器的sort()?
谢谢!
答案 0 :(得分:27)
您的比较器看起来不正确:
function(a, b){return a.name > b.name;}
这会返回true
或false
,但会返回-1
,0
或1
,具体取决于排序。
请参阅How to sort strings in 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>");
}
}