JavaScript 中 sort 函数 为什么 return a-b 就是升序?

思否 问答 👍 2 含 AI 优化版

问题

JavaScript 中 sort 函数 为什么 return a-b 就是升序?

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

Array.prototype.sort() 传入比较函数时,为什么 return a - b 就能实现升序排序?想理解背后的判断逻辑。

涉及技术(如有)

  • Array.prototype.sort() 比较函数机制

期望结果

理解比较函数返回值与排序结果之间的对应关系。

回答

原始回答

有没有可能,是根据你返回 「正数、0、负数」 来判断是「大于、小于、还是等于」呢?

AI 优化 · 回答整理

解答思路

sort 并不关心比较函数返回的具体数值大小,只关心返回值的正负(或零),据此判断两个元素的先后顺序。

详细说明

  • 比较函数 (a, b) => a - b 中:
    • a - b 为负数时,表示 a 应排在 b 前面;
    • a - b 为正数时,表示 a 应排在 b 后面;
    • a - b 等于 0 时,表示两者顺序不变(相等)。
  • 因为 a - ba < b 时恰好是负数,在 a > b 时恰好是正数,所以这种写法天然对应了升序的排列规则。反过来 return b - a 就会得到降序。
  • 需要注意,比较函数应该返回正数 / 0 / 负数这三种语义,而不是必须返回 1 / 0 / -1,引擎只看符号,不看具体数值大小。

小结

sort 比较函数的返回值本质上是大于、小于、等于的语义信号(正数/负数/零),a - b 恰好满足这个语义并对应升序,这也是记忆和推导排序规则的关键。

由大模型辅助整理,保留原意,补充结构与代码格式。

回答转载自 SegmentFault

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。