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,您可以在其中重现它:
有没有想过解决每个浏览器的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)