对于sort()有些疑问

对于sort()有些疑问

为什么使用 return a-b  或者  return b-a   就可以实现数字的正常排序?原理是什么?http://img1.sycdn.imooc.com/climg//5962098700015f5c05220312.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
小丸子爱吃菜 2017-07-10 15:23:14

这个是JS自己封装好的方法,如果数组内的元素不是number而是别的类型,也能判断,只是很少有人会去这么做。

你自己可以把数组里面的数字改成字符串或者别的,看看结果是什么。

小丸子爱吃菜 2017-07-10 10:17:19

该函数sort比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

                   若返回值<=-1,则表示a 在排序后的序列中出现在b之前。

                   若返回值>-1 && <1,则表示 a 和b 具有相同的排序顺序。

                   若返回值>=1,则表示 a在排序后的序列中出现在 b 之后。

所以:a-b输出从小到大排序,b-a输出从大到小排序。

祝学习愉快!

  • 提问者 超速飛 #1
    return a-b; 不应该是返回a-b的值吗?为什么就得出了排列顺序?是ECMAscript这么规定的吗? 如果数组内的元素不是number类型的值而是string类型的值的话,这个判定还有效吗?
    2017-07-10 15:15:51
  • 慕田峪7213717 回复 提问者 超速飛 #2
    对,我也不能理解。a和b的值可以是任何数,假如a=5,b=4或者a=4,b=5,拿a-b来说,结果可能为1或-1,假如a=b,还会是0,那么在a-b可能是正数、负数、0三种的情况下如何判断出是升序?
    2017-09-23 10:08:42
  • 提问者 超速飛 回复 慕田峪7213717 #3
    后来我看书在反复一想,本身sort()是个排序方法,我们在sort()参数中定义的函数最终返回的是sort()可以识别的值,会根据返回的值进行判断并排序。所以最终可以输出我们想要的序列。毕竟我们不知道sort()内部是怎么样的(有兴趣你可以去查一下sort()方法的源码),但是可以确定我们通过函数返回的值是符合sort()进行排序的规则的。我是这么理解的。
    2017-09-30 09:09:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师