gpt4 book ai didi

javascript - 为什么这种不正确的排序(返回 bool 值的比较器)在 Firefox 中有效?

转载 作者:行者123 更新时间:2023-11-28 04:32:11 25 4
gpt4 key购买 nike

我知道这种行为是由于比较器中返回 0 造成的,我的问题是为什么这个错误的代码在 Firefox 中仍然有效。请在回答之前阅读整个问题。

我有这组数据:

var data = [
'Salas Mccarthy',
'Jodi Graham',
'Hollie Hardin',
'Bullock Cole',
'Peterson Mosley',
'Lucille Jackson',
'Cooper Leonard',
'Iris Shepherd',
'Oneil Head',
'Swanson Singleton',
'Sutton Odom'
]

console.log(data.sort(function (a, b) { return a > b; }));

在 Chrome 浏览器中运行该代码会得到未排序的结果:

["Lucille Jackson", "Salas Mccarthy", "Hollie Hardin", "Bullock Cole", "Peterson Mosley", "Jodi Graham", "Cooper Leonard", "Iris Shepherd", "Oneil Head", "Sutton Odom", "Swanson Singleton"]

在 Firefox 中运行相同的代码时会给出排序结果:

[ "Bullock Cole", "Cooper Leonard", "Hollie Hardin", "Iris Shepherd", "Jodi Graham", "Lucille Jackson", "Oneil Head", "Peterson Mosley", "Salas Mccarthy", "Sutton Odom", "Swanson Singleton"]

我的理解是,如果我像我一样返回 a > btrue/false 会转换为 1/0 >0 表示保持其相对于彼此不变。因此,我知道 Chrome 给我提供了一个未排序的结果,且比较器不正确。

我应该在比较器函数中返回一个数值,例如

data.sort(function (a, b) { return a > b ? 1 : -1; })

这样做将在两个浏览器中提供一致的排序结果。但我仍然很困惑为什么它首先可以在 Firefox 中运行?

之后,我从数组中删除了 Salas McCarthy。即使比较器不正确,Chrome 和 Firefox 也能很好地对数组进行排序!

var data = [
'Jodi Graham',
'Hollie Hardin',
'Bullock Cole',
'Peterson Mosley',
'Lucille Jackson',
'Cooper Leonard',
'Iris Shepherd',
'Oneil Head',
'Swanson Singleton',
'Sutton Odom'
]

console.log(data.sort(function (a, b) { return a > b }));

Chrome 和 Firefox 的结果:

["Bullock Cole", "Cooper Leonard", "Hollie Hardin", "Iris Shepherd", "Jodi Graham", "Lucille Jackson", "Oneil Head", "Peterson Mosley", "Sutton Odom", "Swanson Singleton"]

这些排序行为真的很奇怪,有人能解释一下吗?

最佳答案

如果您想要的只是词典排序,请在字符串数组上使用不带回调函数的 [].sort():如果不与回调函数一起使用,sort() 首先是一个 unicode 词典排序函数。

关于javascript - 为什么这种不正确的排序(返回 bool 值的比较器)在 Firefox 中有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44539779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com