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;
});

而不是使用-. -仅当字符串的所有字符都是数字时才有效。


以上是Javascript中的sort((a,b)=&gt;ba)与reverse()的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>