为什么 sort() 方法不能按预期处理字符串数组?

Why does the sort() method does't work as expected with an array of strings?

我正在 JavaScript 中试验 sort() 方法。文档说 return 值应该是 > 0,以便在 a 之前排序 b。我有以下代码来反转字符串数组,并将 return 值作为正整数,我认为应该以相反的顺序对数组进行排序:

let nums = ["x", "y", "z"];
nums.sort((a, b) => 1); // returning a positive number to sort b before a
console.log(nums)

然而,当我执行代码时,输​​出是:

[ 'x', 'y', 'z' ] // not reversed at all

但是当我将 return 值设置为负数时,代码确实给出了预期值 - [ 'z', 'y', 'x' ]。对此有解释吗?我做错了什么吗?

在这里你不是有条件地检查ab哪个更大或更小。返回 1 将评估来自 sort((a, b) 的第一个参数更大。哪个 return 与您完全相同的数组。

你最好将它们与排序回调函数中的值进行比较,并根据值 return 1 或 -1。

这将导致升序。

let nums = ["x", "y", "z"];
nums.sort((a, b) => a > b ? 1 : -1);
console.log(nums)

切换 return 值以获得降序。

let nums = ["x", "y", "z"];
nums.sort((a, b) => a > b ? -1 : 1);
console.log(nums)

发生这种情况是因为 sort 方法的 callback 需要两个参数,但它们并不像人们想象的那样对应于 第一第二第三...等等... elements 但相反,a 是第二个元素,b 是第一个元素,所以当它说大于 1 的数字时 b 放在 a 这就是它的作用:

const nums = ['x', 'y', 'z'];

nums.sort((a, b) => {
  console.log(a,b)  // yx -zy
});