按相反的顺序对数组进行排序?

时间:2017-04-14 09:31:13

标签: javascript

我正在实现的算法需要以反向词法排序对数组进行排序。但是,在发现一些不正确的结果后,我发现这条线路造成了一些麻烦:

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),但这假设ab仅包含"英语"字符以使两个语句相同。

一个明显但丑陋的解决方案就是:

someArray.slice().sort((a, b) => a < b ? 1 : a > b ? -1 : 0);

但这似乎很长且没必要。有没有更好的方法以反向词法顺序对数组进行排序?

0 个答案:

没有答案