function sortNum(a,b) { return a - b; //升序,如降序,把“a - b”该成“b - a” } var myarr = new Array("80","16","50","6","100","1"); document.write(myarr + "<br>"); document.write(myarr.sort(sortNum));
如上代码,是基于什么原理将数组排序的呢?
理解:
document.write(myarr.sort(sortNum))此行的意思是myarr.sort()按照sortNum两两比较进行排序。
因为 arrayObject.sort(方法函数) 按照按unicode码顺序排列,而unicode码下 a > b ,
疑问:
那么return a-b; 结果为真还是为假, 函数 sortNum 返回值是a还是b?
因为本身a>b。不信你把a,b换成e,f或者m,o,会是一样的
可以这样来理解,不一定科学正常,但是有助于理解。
JS自动排序,结果一下子就出来了,为了方便理解,我们可以把这个JS运算过程放慢一些,过程分解成很多小的步骤。
就以此问题中的数字排序为例。
var myarr = new Array("80","16","50","6","100","1");
要将这代码中的数字排序,就要用到排序函数,而排序函数只对2个字进行比较。为了达成排序目的,程序就自动地把数组里的所有2个字都进行了【a-b】的操作。
首先,把第1位数“80”当作a,把其它数字当作b,此时,要完成的操作有80-16,80-5,80-6,80-100,80-1。经过这一轮排序后,初步排序结果基本上是16,50,6,1,80,100。因为还有数没有进行两两相减进行比较,所以还要继续进行下面的操作。
现在,把第2位数“16”当作a,把其它数当作b, 此时,要完成的操作有16-50,16-6,16-100,16-1。这次的排序结果,在上一轮结果上再进行比较排序,改正其中几个不对的。现在的排序结果初步是6,1,16,50,80,100。
同理,接下来,其它所有的数继续进行【a-b】的操作,直到所有的数都进行了两两比较。最后,排序结果也一步步修正得到了最终的结果。
他是怎么把参数传到这个sortNum()函数里面的那?
通过两数相减是大于0还是小于0判断两数大小从而排序