Javascript Chome Array.sort和FF'之间的差异;s
这很简单:Javascript Chome Array.sort和FF'之间的差异;s,javascript,Javascript,这很简单: list.sort(function(a, b){return a.priority < b.priority;}); list.sort(函数(a,b){返回a.priorityb.priority?1 :a.优先级0 调用comparefn(a,b)时,如果给定一对特定的a和b作为其两个参数,则始终返回相同的值v。此外,Type(v)是数字,v不是NaN。请注意,这意味着对于给定的a和b对,a CF b中只有一个为真 调用comparefn(a,b)不会修改此对象的属性
list.sort(function(a, b){return a.priority < b.priority;});
list.sort(函数(a,b){返回a.priority
其中列表项类似于{priority:2,foo:“bar”}
在两个主浏览器上表现不一样,我做错了什么
在sort()函数中应该返回一个数值而不是布尔值:1、0或-1。这些数字表示比较元素应移动的方向(向上、停留或向下)。布尔值不提供此控件,因此很可能取决于浏览器希望如何处理它(因此使其在浏览器之间有所不同) 查看网上的文档 假设采用升序排序:
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]
list.sort(函数(a,b){
返回a.priority>b.priority?1
:a.优先级
如果你喜欢它在浏览器中工作,你应该改变两件小事
首先,你如何解析你的int
list.forEach(function(data){data.priority = parseInt(data.priority,10);});
然后进行排序,使其返回一个方向,而不是真/假
list.sort(function(a, b){return b.priority - a.priority;});
这是你的小提琴,但有固定装置
如果该要求被打破,排序将表现为未定义
引用:
如果comparefn
对于该数组的元素[…]不是一致的比较函数,则排序行为由实现定义
如果集合S
中的所有值A
、b
和c
(可能是相同的值)满足以下所有要求,则函数comparefn
是一组值S
的一致比较函数。A CF b
表示comparefn(A,b)>0
调用comparefn(a,b)
时,如果给定一对特定的a
和b
作为其两个参数,则始终返回相同的值v
。此外,Type(v)
是数字,v
不是NaN
。请注意,这意味着对于给定的a
和b
对,a CF 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
comparefn
将集合S
划分为等价类,并且这些等价类是完全有序的
要在JavaScript中比较数字(反向),只需
return b.priority - a.priority;
您应该在
sort()函数中返回一个数值而不是布尔值:1、0或-1。啊,对了,谢谢,使用:return b.priority-a.priority返回布尔值实际上是可以的,因为它们将被转换为0
或1
。但是,这并不构成有效的排序,不同的排序算法将导致不同的错误结果。这将给出降序。
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
return b.priority - a.priority;