这很简单:
list.sort(function(a, b){return a.priority < b.priority;});
其中列表项类似于{priority: 2, foo: "bar"}
在两个主要浏览器上表现不一样,我做错了什么?
答案 0 :(得分:2)
你应该在sort()函数中返回一个数字而不是一个布尔值:1,0或-1。这些数字代表比较元素应该行进的方向(向上,停留或向下)。布尔值不会给你这个控件,所以最有可能取决于浏览器如何处理它(因此在浏览器之间有所不同)。
查看Array.prototype.sort上的文档。
假设升序排序:
list.sort(function(a, b){
return a.priority > b.priority ? 1
: a.priority < b.priority ? -1
: 0;
});
// yields priorities of: [-8,-7,-3,0,1,3,12,29,30,200,1992]
答案 1 :(得分:0)
如果你喜欢在展位浏览器中工作,你应该改变两件小事。
首先你如何解析ur int。
list.forEach(function(data){data.priority = parseInt(data.priority,10);});
然后排序,所以它返回一个方向,而不是真/假。
list.sort(function(a, b){return b.priority - a.priority;});
这是你的小提琴,但updated有修复。
答案 2 :(得分:0)
return a.priority < b.priority;
这不是有效的比较功能。返回0
(或false
,在您的情况下)将意味着这两个项目被认为是相同的 - 它们并非总是如此。为了保持一致,比较函数需要满足等式
comp(a, b) == -1 * comp(b, a)
// or, if not only the values -1, 0 and 1 are allowed:
comp(a, b) * comp(b, a) <= 0
如果该要求被破坏,排序将表现为未定义。
如果
comparefn
不是该数组元素的一致比较函数,则sort的行为是实现定义的。如果所有值
comparefn
,S
和{满足以下所有要求,则函数a
是一组值b
的一致比较函数集合c
中的{1}}(可能是相同的值):符号S
表示a <CF b
;comparefn(a,b) < 0
表示a =CF b
(任一标志);comparefn(a,b) = 0
表示a >CF b
。当给定一对特定值
comparefn(a,b) > 0
和comparefn(a,b)
作为其两个参数时,调用v
始终返回相同的值a
。此外,b
是数字,Type(v)
不是v
。请注意,这意味着对于给定的NaN
和a <CF b
对,a =CF b
,a >CF b
和a
中只有一个为真。
- 调用
b
不会修改此对象。comparefn(a,b)
(反身性)- 如果
a =CF a
,则a =CF b
(对称)- 如果
b =CF a
和a =CF b
,则b =CF c
(a =CF c
的及物性传承- 如果
=CF
和a <CF b
,则b <CF c
(a <CF c
的及物性传承- 如果
<CF
和a >CF b
,则b >CF c
(a >CF c
的及物性传承注意:上述条件是必要且足以确保
>CF
将集合comparefn
划分为等价类,并且这些等价类是完全有序的。
要比较JavaScript中的数字(反向),只需
S