数字排序在不同的浏览器中给我不同的值:
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/