8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

JavaScript 中的排序函数如何工作,以及比较函数

j_random_hacker 1月前

35 0

正如已经问过的:在 JavaScript 中,排序函数如何与比较函数一起工作?如果我有一个数组,并且我现在执行 array.sort(compare),书中写道,如果比较函数...

正如已经问过的:JavaScript 中的 sort 函数如何工作,以及 compare 函数如何工作?如果我有一个数组, array.sort(compare) 现在书上写着,如果 compare 函数返回 a-b (数组的两个索引),那么它会根据结果是大于 0、小于 0 还是等于 0 来工作。但是,它究竟是如何工作的呢?我无法弄清楚。

帖子版权声明 1、本帖标题:JavaScript 中的排序函数如何工作,以及比较函数
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由j_random_hacker在本站《sorting》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我认为可能是这样(嗯,我不确定。)

    假设该函数 compare(a,b) 是比较函数。它返回 c 。假设我们要对数组中的条目进行排序 N 以获取排序结果数组 M .

    我不知道确切的排序算法,并且如果 c 既不是 (a-b) 也不是 (b-a) (例如,如果 c "b-2" , "a+b" 或其他一些表达式),不同的浏览器甚至会返回不同的结果。

    但根据 ECMA-262 ,排序结果应该是这样的:

    a,b 可以是任意两个索引。这意味着我们实际上将一个有序对传递给了比较函数。 eg: (0,1),(1,4), or even (2,0) , (2,1) .

    ECMAScript 语言规范规定结果应该具有此属性: (a,b) 是传递给比较函数的有序对。

    • 如果 c (函数返回的内容)小于零,则 M(a)< M(b) 必须满足。

    并且规范并未提及如果 c 为零或大于零会发生什么。

    我不确定这是否正确。至少这可以很容易地解释为什么当 c 是时 "a-b" ,条目按数字和升序排序,以及为什么当 c 是时 "b-a" ,条目按相反顺序排序。

    浏览器的 js 引擎是否实际上不是严格按照 ECMA-262 设计的,或者我完全错了?

    参考

    ECMA-262第五版(查看第129-130页)

返回
作者最近主题: