为什么sort()JavaScript函数在Firefox中有效但在Chromium中无效?

时间:2013-08-22 18:03:13

标签: javascript jquery google-chrome firefox chromium

我已经调试了两天的JavaScript代码,现在我发现它可以在Firefox中运行。

我将代码上传到jsFiddle,因此您可以对其进行测试there

它在Firefox v23中运行良好,但在Chromium v​​28.0.1500.71中没有排序。我正在使用jQuery v1.10.1

我不知道错误是在sort()函数上还是在jQuery库中。

这应该被报告为Chromium中的错误吗?

var data = {
    "list": [
        {
            "title": "a",
            "date": "03/08/2010"
        },
        {
            "title": "b",
            "date": "31/07/2010",
        },
        {
            "title": "c",
            "date": "08/08/2010",
        },
        {
            "title": "d",
            "date": "01/08/2010"
        },
        {
            "title": "e",
            "date": "11/12/2010"
        },
        {
            "title": "f",
            "date": "10/12/2010"
        },
        {
            "title": "g",
            "date": "12/12/2010"
        },
        {
            "title": "h",
            "date": "14/12/2010"
        },
        {
            "title": "i",
            "date": "11/12/2010"
        },
        {
            "title": "j",
            "date": "05/08/2010"
        },
        {
            "title": "k",
            "date": "03/08/2010"
        }
    ]
};
// Sort
$.each(data, function (key, val) {
    val.sort(function(a, b) {
        return a.title.toLowerCase() > b.title.toLowerCase();
    });
    // The object is not sorted here
});
// Print
document.querySelector("pre").textContent = 
    JSON.stringify(data, null, 4);

2 个答案:

答案 0 :(得分:3)

您的sort比较器已损坏。

sort回调预计会返回一个负数,0或一个正数,具体取决于第一个参数是小于,等于还是大于第二个参数。

你总是返回一个布尔值,这不是它应该做的。

答案 1 :(得分:1)

试试这样:

$.each(data, function (key, val) {
    val.sort(function(a, b) {
        return a.title.toLowerCase().localeCompare(b.title.toLowerCase());
    });
});

$("pre").text( JSON.stringify(data, null, 4) );

FIDDLE

localeCompare返回一个数字,指示引用字符串是在排序顺序之前还是之后出现,或者与排序顺序中的给定字符串相同,换句话说,它返回-1,1或0,同时将字符串与{{进行比较1}}或<返回true或false,这不是>所期望的。