JavaScript 数组排序
-
-
-
数字排序
默认情况下,sort()函数将值排序为字符串。这适用于字符串(“Apple”出现在“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()方法调用比较函数(40,100)。该函数计算40-100,并返回-60(负值)。sort函数将40排序为低于100的值。您可以使用此代码段进行数字和字母顺序排序:
尝试一下<button onclick="myFunction1()">字母排序调用</button> <button onclick="myFunction2()">数字排序调用</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 a - b}); // 现在points[0]包含最低值 // points[points.length-1]包含最高值
您自己尝试使用降序的办法来找到最大值和最小值如果您只想找到最高(或最低)值,则对整个数组进行排序是一种非常低效的方法。
-
Math.max()和Math.min()
您可以使用Math.max.apply用来查找数组中的最大数字:
尝试一下function myArrayMax(arr) { return Math.max.apply(null, arr); }
Math.max.apply(null, [1, 2, 3])相当于Math.max(1, 2, 3)。您可以使用Math.min.apply用来查找数组中的最小数字:
尝试一下function myArrayMax(arr) { return Math.min.apply(null, arr); }
Math.min.apply(null, [1, 2, 3])相当于Math.min(1, 2, 3)。 -
自定义JavaScript Min/Max 方法
最快的解决方案是使用“自制”方法。此函数循环遍历一个数组,将每个值与找到的最高值进行比较:查找最大值:
尝试一下function myArrayMax(arr) { var len = arr.length var max = -Infinity; while (len--) { if (arr[len] > max) { max = arr[len]; } } return max; }
查找最小值:
尝试一下function myArrayMin(arr) { var len = arr.length var min = Infinity; while (len--) { if (arr[len] < min) { min = arr[len]; } } return min; }
-
排序对象数组
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; });