二十五岁时我们都一样愚蠢、多愁善感,喜欢故弄玄虚,可如果不那样的话,五十岁时也就不会如此明智。
标题: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; });