我正在对以下数组进行排序JavaScript 数组 sort() 方法 http://www.w3schools.com/jsref/jsref_sort.asp。当我使用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,而当我使用自己的体育场时,会使用 sort() 函数compareFunction
在IE11上无法正常工作,所以Waldo比Sarah先显示,粉丝们很困惑。
我创建了一个Plunker http://plnkr.co/edit/TNsa5N?p=preview您可以在哪里重现它:
- Firefox 33.1 - 工作!! :)
- Chrome 39.0.2171.65 - 工作!! :)
- Internet Explorer 11.0.9600 - 不工作:(
有办法解决每个浏览器的 sort() 问题吗?
Thanks!
您的比较器看起来不正确:
function(a, b){return a.name > b.name;}
这返回true
or false
,虽然它应该返回-1
, 0
or 1
取决于订购。
See 如何在 JavaScript 中对字符串进行排序 https://stackoverflow.com/questions/51165/how-do-you-do-string-comparison-in-javascript(具体来说语言环境比较 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/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>");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)