javascript - 如何获得一致的数字排序结果?

标签 javascript arrays google-chrome sorting firefox

数字排序在不同的浏览器中给我不同的值:

function compareNumbers(a, b) {
    return a - b;
}

['B', 'C', 'A'].sort(compareNumbers);

Chrome 和 Safari 不会改变顺序,但在 Firefox 中我得到了

['A', 'C', 'B']

如何在浏览器之间获得一致的排序?

我实际上想要实现的是按数字和字典顺序对数组进行排序。例如,在 Chrome 和 Safari 中,

[5, 11, 'B', 'C', 8, 'A'].sort().sort(compareNumbers);

似乎完成了任务,即

[5, 8, 11, 'A', 'B', 'C']

在 Firefox 中我必须做

[5, 11, 'B', 'C', 8, 'A'].sort().reverse().sort(compareNumbers);

得到相同的结果。

最佳答案

您可以像这样更改 comapreFuncion:

const arr = [5, 11, 'B', 'C', 8, 'A']
arr.sort((a, b) => a - b || a.toString().localeCompare(b.toString()))
console.log(arr)

如果比较的两个项目都是数字,则减法将决定顺序。如果其中一个是字母表,a-b 将返回 NaN,即 falsy值(value)。然后,将检查 || 中的第二个条件,并使用 localeCompare 按字母顺序对它们进行排序。

关于javascript - 如何获得一致的数字排序结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57589169/

相关文章:

javascript - 如何复制这个 JS 变量并更改使用的文本?

javascript - 如何最好地传递几乎总是相同的可选函数参数

google-chrome - 调试新的 Mozilla WebExtension API

arrays - 异或交换可以扩展到两个以上的变量吗?

java - 我可以创建特定方法的 toString() 吗?不是全类

css - chrome 上的阴影和旋转 css 行为

android - 响应图像不适用于 android 手机/chrome 浏览器

javascript - 如何检查 dropzone 中是否已有图像?

javascript - 异步方法链?

javascript - 我在 javascript 中更新一个数组(键,值)对象