Javascript sort()不适用于Chrome中超过10个对象的数组

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对数组进行排序." :也许这可能会有所帮助......

有人可以帮帮我吗?

the*_*eye 5

Array.prototype.sort method期望sort helper方法返回三种不同类型的值.

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
Run Code Online (Sandbox Code Playgroud)

所以,你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)