javascript - JS 的工作流程/顺序如何:将函数与数组进行比较?
问题描述
我知道这是功能:
function myFunction() {
points.sort(function(a, b){return a - b});
完全适用于排序数组包含升序的数字..
如果结果为负,则 a 排在 b 之前。
如果结果为正,则 b 排在 a 之前。
如果结果为 0,则不会对这两个值的排序顺序进行任何更改。
但是比较 "a" 和 "b" 的顺序是怎样的呢?是“index0”比较“index1”,然后“index1”比较“index2”等等……?我只是不明白这个“比较功能”工作流程/序列......
解决方案
它是未指定的。规范说:
- 对 Get、Set、DeletePropertyOrThrow 和 HasOwnProperty 抽象操作执行依赖于实现的调用序列,以 obj 作为第一个参数,并调用 SortCompare(如下所述),这样:
- ...
因为这个顺序是未指定的,我们曾经能够看到这样的行为,在不同的环境中,不一致的排序算法会导致不同的排序结果,因为不同的环境以不同的顺序比较数组项。
如果你确实有一个稳定、一致的排序算法,那么比较项目的顺序应该无关紧要,特别是考虑到排序现在应该从ES2019 开始稳定(“也就是说,比较相等的元素必须保持其原始命令”)。
无论引擎比较项目的顺序如何,结果数组在不同环境中都应该是相同的。它可以先比较项目[0]
和项目[1]
,也可以先比较项目[length - 1]
和项目[length - 2]
。
推荐阅读
- python - For循环ValueError:一个Series的真值不明确
- javascript - 如何制作没有标题或描述的嵌入 Discord.js
- sql - 如何使用分隔符拆分字符串并获取第一个值
- statistics - 如何使用有符号的地面实况值和无符号的预测值计算 ROC AUC
- python - 为什么图像显示时会闪烁?
- python - 如何查找 NLP 单词计数并绘制它?
- reactjs - 在 Yup Schema 中针对不同形状对象的子对象验证子对象
- python-3.x - 无法从我的 python 脚本接收电子邮件
- python-3.x - 每当python中的线程内出现异常时,如何终止作业(即停止主线程)?
- angular - TypeScript 没有将解析的路径添加到自定义 Angular 库 .d.ts 文件中