我想使用Array.prototype.sort()对具有重复值的数组进行排序。
例如,如果我执行此[1, 2, 0, 1].sort((a, b) => a + b)
以降序获得排序数组,则我将返回同一数组[1, 2, 0, 1]
。
为什么会发生这种情况,如何使用Array.prototype.sort
对数组进行排序? javascript的Array排序是否不能可靠地对重复值进行排序,或者我提供的功能无法进行正确的比较?我想使用Array.prototype.sort
实现此目的,而不必编写自己的sort函数。
谢谢!
答案 0 :(得分:3)
您需要将两个值相减。
//ascending order
console.log([1, 2, 0, 1].sort((a, b) => a - b))
//descending order
console.log([1, 2, 0, 1].sort((a, b) => b - a))
答案 1 :(得分:0)
不起作用的原因是:
如果您查看offical MDN Documentation,
sort()方法对数组中的元素进行排序并返回 数组。默认的排序顺序是基于将 元素转换为字符串,然后对数组进行补偿。
var months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]
var array1 = [1, 2, 0, 1];
array1.sort((a, b) => a + b);
console.log(array1);
// expected output: Array [1, 2, 0 ,1]
因此,要比较数字而不是字符串,比较功能可以 只需从a中减去b。以下函数将对数组进行排序 升序(如果其中不包含Infinity和NaN)
function compareNumbers(a, b) {
return a - b;
}