Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chome Array.sort和FF'之间的差异;s_Javascript - Fatal编程技术网

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;