JavaScript 的 Array.sort 方法允许自定义比较函数对元素进行排序,以及一个常见问题出现:返回布尔值的简单比较函数是否足以进行排序?答案显然是否定的。
JavaScript 中的比较函数应遵循以下规则:
但是,返回布尔值并不能保证一致性。例如,如果 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)
结果不一致,因为比较函数不强制传递性。
为了确保排序一致,请使用返回正确的数值:
通过遵循这些准则,您可以确保 JavaScript 代码中的可靠且可预测的排序行为。
以上是为什么布尔返回值不足以用于 JavaScript 的 Array.sort 比较函数?的详细内容。更多信息请关注PHP中文网其他相关文章!