JavaScript排序



sort() 方法是最强大的数组方法之一.


排序数组

sort() 方法按照字母顺序对数组排序:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Sorts the elements of fruits

让我试试


反转数组

reverse() 方法反转数组中的元素。.

可以使用它按降序排序数组:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Sorts the elements of fruits
fruits.reverse();         // Reverses the order of the elements

让我试试


数字排序

默认, sort() 函数按字符串值排序.

这适用于字符串 ("Apple" comes before "Banana").

然而,如果数字被排序为字符串,“25”大于“100”,因为“2”大于“1”.

因为这样, sort() 排序数字时会产生不正确的结果.

您可以通过提供比较函数来修复此问题:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});

让我试试

使用同样的技巧来降序排序数组:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});

让我试试

Compare 函数

比较函数的目的是定义另一种排序顺序.

根据输入的参数,比较函数应返回一个负,零或正值:

function(a, b){return a-b}

当sort() 函数比较两个值,它将值发送给比较函数,并根据返回的(负值,零,正)值对值进行排序.

例如:

当比较 40 和 100时, sort()方法调用比较函数 function(40,100).

该函数计算40-100,并返回-60(负值).

排序函数将排序40低于100.

您可以使用此代码段试验数值,按字母顺序排序:

<button onclick="myFunction1()">Sort Alphabetically</button>
<button onclick="myFunction2()">Sort Numerically</button>

<p id="demo"></p>

<script>
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;

function myFunction1() {
    points.sort();
    document.getElementById("demo").innerHTML = points;
}
function myFunction2() {
    points.sort(function(a, b){return a - b});
    document.getElementById("demo").innerHTML = points;
}
</script>

让我试试


随机排序数组

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});

让我试试


找到最高(或最低)值

如何找到数组中的最高值?

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// now points[0] contains the highest value

让我试试

和最低:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// now points[0] contains the lowest value

让我试试


对象数组排序

JavaScript数组通常包含对象:

var cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}];

即使对象具有不同数据类型的属性, sort() 方法可以用来对数组进行排序.

该解决方案是编写一个比较函数来比较属性值:

cars.sort(function(a, b){return a.year - b.year});

让我试试

比较字符串属性有点复杂:

cars.sort(function(a, b){
   var x = a.type.toLowerCase();
   var y = b.type.toLowerCase();
   if (x < y) {return -1;}
   if (x > y) {return 1;}
   return 0;
});

让我试试