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

标签 javascript arrays google-chrome sorting

在 Javascript 中使用 sort() 方法时,我无法对超过 10 个对象的数组进行正确排序。这只发生在谷歌浏览器中;与 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>

在以下链接: http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html 我读到“如果数组有 10 个或更少的元素,Chrome 将使用 InsertionSort 对数组进行排序。”:也许这可能会有所帮助...

有人能帮帮我吗?

最佳答案

Array.prototype.sort 方法期望排序辅助方法返回三种不同类型的值。

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;
    }
}

因为 a.numberb.number 实际上是整数,你可以直接这样写

return a.number - b.number;

关于Javascript sort() 不适用于 Chrome 中超过 10 个对象的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22427695/

相关文章:

javascript - 在创建的函数中访问 axios 响应数据 - Vue2

javascript - 如何过滤掉数组之间的匹配项,并添加额外的键/值?

c - 在 Chrome 的 NPAPI 窗口插件中使用 Windows raw_input

html - 为什么在打印媒体查询中不显示 none ?

javascript - Yii 如何要求用户在 CStarRating 中确认他的选择

javascript - 如何在我的 Angular 应用程序中测试 rootscope

javascript - 扩展 javascript 选项以添加功能

c++ - 计算for循环c++中的出现次数

java - 如何在 java/android 中重复执行任务?

javascript - 添加到 chrome devtools 中的设置