想要按照从小到大的顺序排列varnumbers=[0,1,5,10,15];numbers.sort();console.log(numbers);打印出来是0,1,10,15,5书中说的是字符串比较下,10在5的前面,这是怎么比较的???functioncompare(a,b){if(ab){return1;}else{return0;}}numbers.sort(compare);console.log(numbers);比较函数作为参数传递给sort()之后,是怎么让2个数字换位置排列的?不清楚调换位置的动作是哪行代码执行的,难道是sort()本身可以对返回值1,-1,0做相应的动作让两个数字调换位置吗?
2 回答
MM们
TA贡献1886条经验 获得超2个赞
关于第一次排序的结果为什么数组[0,1,5,10,15].sort()之后的结果是0,1,10,15,5,而不是期待的0,1,5,10,15这是因为sort方法默认(即没有compare函数)按照数组元素对应的字符串的Unicode从小到大进行排序。也就是说,上面的结果中5排在10,15后面,是因为'5'比'10','15'大。你现在就可以按F12打开console,输入下面的代码'5'> '10'结果应该是true。这说明,字符串'5'比'10'大,所以它排在后面。关于compare函数compare函数只是指定了排序策略,sort会根据这个策略来排序。至于怎么调换位置,怎么生成最后的结果,那是sort的事情。这里其实是一个常见的设计模式,策略模式。有兴趣可以去了解一下。
弑天下
TA贡献1818条经验 获得超8个赞
JS高级程序设计?哈哈,刚好前段时间看了这个。问题1上面已经解答了,我补充一下问题2。compare作为sort()的参数返回三个结果:0、1、-1。即0、正数、负数。就像你说的“sort()本身可以对返回值1,-1,0做相应的动作让两个数字调换位置”,这里是sort()得到的参数为正数时才交换两个值的顺序,否则不交换。
添加回答
举报
0/150
提交
取消
