我正在尝试对UI中的元素列表进行排序:
$('.stuff').sort(function(a,b) {
a = $(a).attr('data-date');
b = $(b).attr('data-date');
console.log(a + " > " + b);
console.log(a > b);
return a >= b;
}).appendTo('#stuff_container');
html看起来像
<div class='stuff' data-date='1278395142'>...</div>
<div class='stuff' data-date='1378395142'>...</div>
如果我将记录放在那里,我可以看到它正确进行比较,当比较为真时返回true。但是在我运行排序的UI中,元素随机出现。如果我重复执行此代码,它会随机化订单。我可以在调试控制台中通过查看数据库都没有按顺序验证这一点。
我在goog上找不到关于这里可能发生的事情的任何参考。我明天会深入研究jQuery,但我想我会把它扔出去。 jQuery 1.4.2(是啊..)谢谢!
答案 0 :(得分:3)
传递给Array.prototype.sort
的回调应该返回Number
。尝试:
return Number(a) - Number(b);
答案 1 :(得分:2)
您的排序功能正在返回(转换为数字后)0
或1
。值0
对应于sort
中的“值相等”。
基本上,这意味着如果它检查值5
和4
,则告诉它5大于4并且应该继续。但是,如果它检查4
和5
,则告诉它它们是平等的。这是矛盾的,因此行为未定义,导致您看到的“随机”排序。
试试这个:
return a == b ? 0 : (a > b ? 1 : -1);