Javascript中的sort((a,b)=>ba)与reverse()
function solution(s) {
var answer = ""
var str = s.split("");
return str.sort().reverse().join("");
}
function solution(s) {
var answer = ""
var str = s.split("");
return str.sort((a,b) => b - a ).reverse().join("");
}
我一直在研究 javascript,理论上这两个应该是相同的,但它们产生不同的结果。大写字母的代码值较小,因此这些代码应该产生相同的结果,但事实并非如此。他们为什么这样做?
回答
在.sort没有回调的情况下使用将按字典顺序比较每个元素。例如,['a', 'b'].sort()结果是['a', 'b']因为a具有较低的代码点。
但是您提供的自定义排序回调不适用于字符串:
.sort((a,b) => b - a )
.sort((a,b) => b - a )
因为-会尝试将两个操作数强制转换为数字 - 但非数字字符串无法转换为数字。NaN每次调用回调时都会返回,因此排序不起作用。
如果您想在自定义比较函数中按字典顺序进行比较,则需要执行以下操作:
.sort((a, b) => {
if (a > b) return 1;
if (a < b) return -1;
return 0;
});
而不是使用-. -仅当字符串的所有字符都是数字时才有效。
THE END
二维码