首页 >web前端 >js教程 >为什么布尔返回值不足以用于 JavaScript 的 Array.sort 比较函数?

为什么布尔返回值不足以用于 JavaScript 的 Array.sort 比较函数?

Barbara Streisand
Barbara Streisand原创
2025-01-04 06:02:41138浏览

Why Isn't a Boolean Return Value Enough for JavaScript's Array.sort Comparison Function?

对于 JavaScript 中的比较函数来说,返回布尔值还不够吗?

JavaScript 的 Array.sort 方法允许自定义比较函数对元素进行排序,以及一个常见问题出现:返回布尔值的简单比较函数是否足以进行排序?答案显然是否定的。

为什么布尔比较是不够的

JavaScript 中的比较函数应遵循以下规则:

  • 返回一个数字:大于如果 a 应排序在 b 之后,则为 0;如果相等,则为 0;如果 a 应排序在 b 之前,则小于 0 b.
  • 保持一致:如果compare(a, b) > 0,则比较(b, a)

但是,返回布尔值并不能保证一致性。例如,如果 Compare(a, b) 返回 false(或等效地,0),则意味着 a 等于或小于 b。这违反了排序算法所需的传递性。

反例

考虑这个比较函数:

function compare(a, b) {
  return a > b;
}

它返回一个布尔值:如果 a 大于 b,则返回 true,否则为 false。

在排序中使用此函数,我们有:

[0, 1, 0].sort(compare); // [0, 1, 0] or [1, 0, 0] (varies between implementations)
[1, 1, 0, 2].sort(compare); // [0, 1, 2, 1] or [1, 1, 0, 2] (varies between implementations)

结果不一致,因为比较函数不强制传递性。

正确的比较函数

为了确保排序一致,请使用返回正确的数值:

  • 词典排序: 使用sort() 没有用于简单字符串或数字排序的自定义函数。
  • 数字排序: 使用 (a, b) =>; a - b 用于按升序对数字进行排序。
  • 自定义排序: 考虑要排序的特定属性,实现遵循上述规则的比较函数。

通过遵循这些准则,您可以确保 JavaScript 代码中的可靠且可预测的排序行为。

以上是为什么布尔返回值不足以用于 JavaScript 的 Array.sort 比较函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn