While using sort() method in Javascript, I'm not able to correctly sort an array of more than 10 objects. This happens only in Google Chrome; with Firefox and IE it works.

在Javascript中使用sort()方法时,我无法正确排序超过10个对象的数组。这仅在Google Chrome中发生;使用Firefox和IE它可以工作。

I have an array of 11 objects with two properties, number and name; I'd like to order these object per number and then per name, but with Chrome it doesn't work.

我有一个11个对象的数组,有两个属性,数字和名称;我想为每个号码订购这些对象,然后按名称订购这些对象,但是对于Chrome,它不起作用。

This is the code of the whole page:

这是整个页面的代码:

<!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>

At the following link: http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html I read that "Chrome will sort arrays using InsertionSort if the array has 10 or less elements.": maybe this may help...

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

Does anybody can help me?

有人可以帮帮我吗?

3 个解决方案

#1


5

Array.prototype.sort method expects the sort helper method to return three different types of values.

Array.prototype.sort方法期望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

So, your sortPlayers has to be tweaked a little, like this

所以,你的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;
    }
}

Since a.number and b.number are actually integers, you can straight away write like this

由于a.number和b.number实际上是整数,你可以像这样直接写

return a.number - b.number;

更多相关文章

  1. 获取JavaScript数组元素的最大长度
  2. 在jQuery的$.post中调用函数时,Undefined不是对象
  3. 对多维数组中的列进行排序
  4. 获取拆分字符串数组的最后一个元素
  5. 如何使函数等到对象的值未定义为js setTimeout
  6. 如何在javascript中合并2个对象[重复]
  7. JavaScript学习07 内置对象
  8. javascript的密封对象之seal(),isSealed()方法
  9. JavaScript String(字符串对象)

随机推荐

  1. 构造方法的参数太多,如何解决?
  2. 被阿里云坑了一把
  3. 优雅地操作 List、Map
  4. 《Effective Java中文版 第2版》读书笔记
  5. 记一次应用线程被阻塞的问题排查
  6. 为什么搞公众号?它挣钱的秘密。
  7. 相似的故事总是在重复着
  8. 又升了一版「Java面试题小程序」
  9. 《Java8实战》读书笔记
  10. 学历不够,连 Java 面试的机会都没,怎么破?