为什么 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' ]
。对此有解释吗?我做错了什么吗?
在这里你不是有条件地检查a
和b
哪个更大或更小。返回 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
});
我正在 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' ]
。对此有解释吗?我做错了什么吗?
在这里你不是有条件地检查a
和b
哪个更大或更小。返回 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
});