Javascript sort()不适用于Chrome中包含10个以上对象的数组 [英] Javascript sort() isn't working for arrays of more than 10 objects in Chrome

查看:67
本文介绍了Javascript sort()不适用于Chrome中包含10个以上对象的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Javascript中使用sort()方法时,我无法正确地对包含10个以上对象的数组进行排序.这仅在Google Chrome浏览器中发生;可以在Firefox和IE上使用.

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.

我有一个由11个对象组成的数组,具有两个属性,即数字和名称;我想按编号然后按名称订购这些对象,但是对于Chrome浏览器,它不起作用.

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.

这是整个页面的代码:

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

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

有人可以帮助我吗?

推荐答案

Array.prototype.sort方法要求sort helper方法返回三种不同类型的值.

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

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必须像这样进行一些调整

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

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实际上是整数,因此您可以像这样直接写

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

return a.number - b.number;

这篇关于Javascript sort()不适用于Chrome中包含10个以上对象的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆