jerkzhang,stay hungry, stay foolish
本文以JavaScript数组排序为专题,主要包括:
此外,JS数组排序 - 按汉语拼音顺序进行排序,请查看此篇回答。
默认情况下,通过调用数组对象的sort方法,可让数组根据元素的首字母顺序进行排序,首字母相同则根据第二个字母进行比较,依次类推。如下所示:
var array_wife = [ "xishi", "diaochan", "zhaojun", "yuhuan", "yuji", "daqiao", "xiaoqiao" ]; // 根据字母顺序进行升序排列 array_wife.sort();
reverse()方法可以使数组反序排列。(跟字母顺序木有关系,就是首尾倒置那种啦)所以说,sort方法结合reverse方法才能做到根据字母反序排列。也就是说,先做到根据字母顺序进行排列,再将根据字母升序排列的数组反序一下,那就是得到了根据字母降序排列的新数组。
var array_wife = [ "xishi", "diaochan", "zhaojun", "yuhuan", "yuji", "daqiao", "xiaoqiao" ]; // 根据字母顺序进行升序排列 array_wife.sort(); // 反序一下 array_wife.reverse();
如果数组的所有元素都是数字,想根据数字的大小对数组进行排序呢?那就自定义个用来比较的函数作为sort方法的参数吧~
升序排列:
var score_array = [66.6, 111, 1, 7, 81, 72]; // 进行升序排列 score_array.sort( function(a, b){return a - b} );
降序排列:
var score_array = [66.6, 111, 1, 7, 81, 72]; // 进行降序排列 score_array.sort( function(a, b){return b - a} );
换一个稍微复杂一点点的数组,如下所示:
var score_array = [ { name: "貂蝉", score: 96 }, { name: "西施", score: 98 }, { name: "虞姬", score: 95.5 } ];
如果要根据每个元素的score属性来进行升序排列,那就如下所示,对比较函数动动手脚啦:
// 进行升序排列 score_array.sort( function(a, b){return a.score - b.score} );
Math.random()方法可以产生0~1之间的随机实数。因此,辅以上述的比较函数,则可如下来实现随机排序。备注:0.5 - Math.random() 就是代表产生 -0.5 ~ 0.5 之间的随机实数。
var score_array = [66.6, 111, 1, 7, 81, 72]; // 随机排序 score_array.sort( function(a, b){return 0.5 - Math.random()} );
Math是JavaScript的内置对象,可以提供很多跟算术相关且非常实用的方法。其中max方法就是求最大值的利器。
Math.max( 1, 2, 3 ); // 返回最大值3 Math.max.apply( null, [1, 2, 3] ); // 返回最大值3
千万别把null忘了,如果觉得这么写比较别扭,可以自定义一个函数用来获取数组中的数字的最大值:
// 传入数字构成的数组,返回数组元素中的最大数字 function jerkMax( array_obj ) { return Math.max.apply( null, array_obj ); }
与Math.max类似,使用Math.min方法获取数组中最小值,如下:
Math.min( 1, 2, 3 ); // 返回最小值1 Math.min.apply( null, [1, 2, 3] ); // 返回最小值1
千万别把null忘了,如果觉得这么写比较别扭,可以自定义一个函数用来获取数组中的数字的最小值:
// 传入数字构成的数组,返回数组元素中的最小数字 function jerkMin( array_obj ) { return Math.min.apply( null, array_obj ); }