如何使用Array.prototype.sort()对具有重复值的数组进行排序?

时间:2019-05-02 02:34:55

标签: javascript arrays sorting duplicates

我想使用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函数。

谢谢!

2 个答案:

答案 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;
}