Fab*_*ini 3 javascript arrays sorting google-chrome
在Javascript中使用sort()方法时,我无法正确排序超过10个对象的数组.这仅在Google Chrome中发生; 使用Firefox和IE它可以工作.
我有一个11个对象的数组,有两个属性,数字和名称; 我想按编号和每个名称订购这些对象,但是使用Chrome它不起作用.
这是整个页面的代码:
<!DOCTYPE html>
<HTML>
<HEAD>
<SCRIPT>
var availableTags = [
{number: 0,name:"Consigli"},
{number: 0,name:"De sanctis"},
{number: 0,name:"Perin"},
{number: 1,name:"Bonucci"},
{number: 2,name:"Essien"},
{number: 2,name:"Florenzi"},
{number: 2,name:"Hernanes"},
{number: 2,name:"Martinho"},
{number: 2,name:"Montolivo"},
{number: 2,name:"Parolo"},
{number: 2,name:"Perez"}
];
function sortPlayers(a, b) {
var result = (parseInt(a.number) > parseInt(b.number));
if( (!result) && (parseInt(a.number) == parseInt(b.number)) ) {
result = a.name.toLowerCase().localeCompare(b.name.toLowerCase());
}
return result;
}
function updateFormation() {
availableTags.sort( sortPlayers );
var html = "";
for (var i = 0; i < availableTags.length; i++) {
html += availableTags[i].number + " " + availableTags[i].name + "\n";
}
alert(html);
}
</SCRIPT>
</HEAD>
<BODY>
<script type="text/javascript">
updateFormation();
</script>
</BODY>
Run Code Online (Sandbox Code Playgroud)
在以下链接:http: //blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html 我读到"如果阵列有10个或更少的元素,Chrome将使用InsertionSort对数组进行排序." :也许这可能会有所帮助......
有人可以帮帮我吗?
Array.prototype.sort method期望sort helper方法返回三种不同类型的值.
Run Code Online (Sandbox Code Playgroud)1. Negative number - If the first element is smaller 2. Positive number - If the second element is smaller 3. Zero - If both the elements are equal
所以,你sortPlayers必须稍微调整一下,就像这样
function sortPlayers(a, b) {
if (a.number === b.number) {
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
} else {
return a.number > b.number ? 1 : -1;
}
}
Run Code Online (Sandbox Code Playgroud)
因为a.number并且b.number实际上是整数,所以你可以像这样直接写
return a.number - b.number;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1985 次 |
| 最近记录: |