首先,我找不到解决整个问题的问题。
我曾经比较过这样的数组:
array.sort((a, b) => {
return a.localeCompare(b, undefined, {numeric: true, sensitivity: 'base'})
})
Run Code Online (Sandbox Code Playgroud)
但是我意识到它不适用于像这样的数组['a', 'A', 'B', -1.50', '0', '1.50', '-2', '2']。
预期输出为:['-2', '-1.50', '0', '1.50', '2', 'A', 'a', 'B']。
我有一些肮脏的想法可以实现它。但是也许有一种干净便捷的方法。
您可以通过获取所需属性的增量来进行比较。这样可以保存数值的顺序。
console.log(
['a', 'A', 'B', '-1.50', '0', '1.50', '-2', '2', 'D']
.sort((a, b) => a - b || a.localeCompare(b, undefined, {sensitivity: 'base'}))
);Run Code Online (Sandbox Code Playgroud)
numeric: true 可以省略该选项,因为在表达式的左侧将没有两个要比较的数字。