专否 写文章

jerkzhang,stay hungry, stay foolish

Dec 10, 2018
Follow

JavaScript 数组排序专题

本文以JavaScript数组排序为专题,主要包括:

  • sort() 方法 - 根据字母顺序来排列
  • sort()方法 + reverse()方法 - 根据字母反序排列
  • 自定义sort()方法的比较函数 - 根据数字大小进行排序
  • 活学活用比较函数
  • 利用Math.random()进行随机排序
  • 利用Math.max()方法获取数组中最大值
  • 利用Math.min()方法获取数组中最小值

此外,JS数组排序 - 按汉语拼音顺序进行排序,请查看此篇回答


sort() 方法 - 根据字母顺序来排列

默认情况下,通过调用数组对象的sort方法,可让数组根据元素的首字母顺序进行排序,首字母相同则根据第二个字母进行比较,依次类推。如下所示:

var array_wife = [ "xishi", "diaochan", "zhaojun", "yuhuan", "yuji", "daqiao", 
                   "xiaoqiao" ];

// 根据字母顺序进行升序排列
array_wife.sort();

运行一下


sort()方法 + reverse()方法 - 根据字母反序排列

reverse()方法可以使数组反序排列。(跟字母顺序木有关系,就是首尾倒置那种啦)所以说,sort方法结合reverse方法才能做到根据字母反序排列。也就是说,先做到根据字母顺序进行排列,再将根据字母升序排列的数组反序一下,那就是得到了根据字母降序排列的新数组。

var array_wife = [ "xishi", "diaochan", "zhaojun", "yuhuan", "yuji", "daqiao", 
                   "xiaoqiao" ];

// 根据字母顺序进行升序排列
array_wife.sort();

// 反序一下
array_wife.reverse();

运行一下


自定义sort()方法的比较函数 - 根据数字大小进行排序

如果数组的所有元素都是数字,想根据数字的大小对数组进行排序呢?那就自定义个用来比较的函数作为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()进行随机排序

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.max()方法获取数组中最大值

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.min()方法获取数组中最小值

与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 );
}

运行一下


喜欢这个文章 | 分享 | 新建跟帖