【发布时间】:2020-05-03 12:25:27
【问题描述】:
我试图对数组进行排序,而我在 Chrome V79 中得到了这种与 Firefox Dev Edition V72 不同的行为(都在桌面版中)。
这是测试,
console.log([4, 2, 5, 1, 3].sort((a, b) => a>b));
console.log(Array.prototype.sort.call([4, 2, 5, 1, 3], (a, b) => a>b));
在 Firefox Dev 中,我得到了这个结果,
但在 Chrome 中,为什么我会得到这个结果,
但是当我用 var 传递同一个数组时,我得到了这个,
但是是的,它对数组进行排序并重写变量,但返回数组的未排序版本。所以,当我在没有任何 var 的情况下直接传递数组时,我没有排序。但是,
按照MDN's reference page,它不应该返回排序后的数组吗??
为什么会有区别??
注意:在示例图像中,有两个示例我正在练习
callfunc。并忘记删除它。所以,直接忽略吧。他们俩都是一样的。
【问题讨论】:
-
正如您发布的链接中所说,您需要返回一个数字。您应该从排序函数返回
0、1或-1,而不是布尔值。 -
你可能会读到为什么布尔返回值是个坏主意...stackoverflow.com/questions/24080785/…
-
我认为 .sort((a,b) => a-b);是对数组升序进行排序的最简洁方式。
-
@AnonymousUser264 应该如何实现
.sort()的细节不是规范的一部分。 Chrome 和 Firefox 的算法略有不同。 -
布尔值可以被强制转换为数字,但如果是,则 true = 1 和 false = 0。问题是对于排序回调,返回 0 意味着“这些值相等”。直到最近(如去年引入的标准),都不能保证
Array.sort的实现是稳定的——也就是说,不能保证相等的值会保持它们的相对位置。因此,当a < b时返回 false/0 可能“发生”用于稳定排序而不是不稳定排序,反之亦然,但不能保证。
标签: javascript arrays sorting