sort()语法:
arrayObject.sort(fn);
参数fn可选,如果为空,则按字母顺序对数组中的元素进行排序,精确地说,是按照字符编码顺序进行排序。So,如果想实现精确排序,应把数组的元素转换成字符串在进行排序。
想按照其他标准排序,则需提供比较函数,没错,是函数,为函数提供两个参数,个人理解就是要排序的其中两个元素。为什么会有这样的猜测,看规则:
function fn (m,n){ if(mn) return 1;//大于,返回1 else return 0;//等于,返回0 }
精简后:
function fn (m, n) { return m-n;}
若 m 小于n, 则返回一个小于0的数值,m 会出现在 n 的前面;
若 m 等于 n, 则返回 0;
若 m 大于 n,则返回一个大于0的数值,m 会出现在 n 的后面;
说白了,如果函数fn返回的值为false,则按照升序排序,如果返回true,排序会降序排序;(m 和 n 按照排序后的顺序比较)
但是如果fn写成这样子呢?
function fn (m, n) { return m < n; }
如果fn的返回值为false,则按降序排序;如果返回true,排序会升序排序;(m 和 n 按照排序后的顺序比较)
那,如果想随机排序呢?
function fn () { return 0.5 - Math.random();}
Math.random()返回一个0到1的随机数,0.5 - Math.random() 就会随机返回true和false,这样就实现随机排序了。
再一次感叹JS的灵活,一个sort就可以把排序搞定。