1.数字排序
在js中默认是使用 sort() 函数按照字符串顺序对值进行排序。
但是,sort() 方法在对数值排序时会产生不正确的结果。
我们可以比值函数来修正此问题;先讲讲比值函数的概念:
比值函数的目的是定义另一种排序顺序。
比值函数应该返回一个负,零或正值,这取决于参数:
function(a, b){return a-b}
当 sort() 函数比较两个值时,会将值发送到比值函数,并根据所返回的值(负、零或正值)对这些值进行排序。
举个栗子:
当比较 40 和 100 时,sort() 方法会调用比较函数 function(40,100)。
该函数计算 40-100,然后返回 -60(负值)。
排序函数将把 40 排序为比 100 更低的值。
接下来,我们再看看在sort中使用比值函数(升序排序):
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
最终得到的结果就是:1,5,10,25,40,100
最大值,最小值也就一目了然了:
现在 points[0] 包含最低值
而 points[points.length-1] 包含最高值
下面的降序同理。
再看看降序排序:
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
只需要把 a - b 换成 b - a 即可。
另外:找最大值,最小值,也可以使用Math的Api:
function myArrayMax(arr) {
return Math.max.apply(null, arr);
}
function myArrayMin(arr) {
return Math.min.apply(null, arr);
}
代码很简单就不多说了;
也可以自己写个JavaScript方法来处理:
最大值:
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;
}
最后,附一些比较实用的处理排序对象的方法,如果有需要可以直接拿来使用:
var persons= [
{type:"Tom", age:25},
{type:"John", age:19},
{type:"Lucy", age:36}];
persons.sort(function(a, b){return a.age- b.age});
结果就不给出来了,感兴趣的可以自己撸一遍;
如果是需要比较字符串属性的话,可以使用下面的方法来处理:
persons.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;
});
网友评论