我正在实现的算法需要以反向词法排序对数组进行排序。但是,在发现一些不正确的结果后,我发现这条线路造成了一些麻烦:
someArray.slice().sort((a, b) => b - a);
进一步调查表明,上述内容并不等同于以下声明:
someArray.slice().sort().reverse();
例如,
var someArray = ["11", "2", "1"];
someArray.slice().sort().reverse(); // ["2", "11", "1"]
someArray.slice().sort((a, b) => b - a); // ["11", "2", "1"]
.sort((a, b) => b - a)
的问题是b - a
正在将值转换为数字,因此不按正确的词法排序进行排序。
目前,我的解决方案是执行b.localeCompare(a)
,但这假设a
和b
仅包含"英语"字符以使两个语句相同。
一个明显但丑陋的解决方案就是:
someArray.slice().sort((a, b) => a < b ? 1 : a > b ? -1 : 0);
但这似乎很长且没必要。有没有更好的方法以反向词法顺序对数组进行排序?