首页 > 解决方案 > JS 的工作流程/顺序如何:将函数与数组进行比较?

问题描述

我知道这是功能:

function myFunction() {
points.sort(function(a, b){return a - b});

完全适用于排序数组包含升序的数字..

如果结果为负,则 a 排在 b 之前。

如果结果为正,则 b 排在 a 之前。

如果结果为 0,则不会对这两个值的排序顺序进行任何更改。

但是比较 "a" 和 "b" 的顺序是怎样的呢?是“index0”比较“index1”,然后“index1”比较“index2”等等……?我只是不明白这个“比较功能”工作流程/序列......

标签: javascriptfunctionsortingcompareworkflow

解决方案


它是未指定的。规范说:

  1. 对 Get、Set、DeletePropertyOrThrow 和 HasOwnProperty 抽象操作执行依赖于实现的调用序列,以 obj 作为第一个参数,并调用 SortCompare(如下所述),这样:
  2. ...

因为这个顺序是未指定的,我们曾经能够看到这样的行为在不同的环境中,不一致的排序算法会导致不同的排序结果,因为不同的环境以不同的顺序比较数组项。

如果你确实有一个稳定、一致的排序算法,那么比较项目的顺序应该无关紧要,特别是考虑到排序现在应该从ES2019 开始稳定(“也就是说,比较相等的元素必须保持其原始命令”)。

无论引擎比较项目的顺序如何,结果数组在不同环境中都应该是相同的。它可以先比较项目[0]和项目[1],也可以先比较项目[length - 1]和项目[length - 2]


推荐阅读