我已经调试了两天的JavaScript代码,现在我发现它可以在Firefox中运行。
我将代码上传到jsFiddle,因此您可以对其进行测试there。
它在Firefox v23中运行良好,但在Chromium v28.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);
答案 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) );
localeCompare
返回一个数字,指示引用字符串是在排序顺序之前还是之后出现,或者与排序顺序中的给定字符串相同,换句话说,它返回-1,1或0,同时将字符串与{{进行比较1}}或<
返回true或false,这不是>
所期望的。