javascript - Google 脚本 - Array.sort - compareFunction 的操作数反转?
问题描述
我正在努力了解如何在 Google Scripts 中使用 array.prototype.sort()。我对 compareFunction 的理解是,对于某些数组A = [5,17,10,3]
,在运行时:
A.sort(function(a,b){\\some function})
, 关于 compareFunctiona == A[0]
和的操作b==A[1]
。这不是真的吗?考虑下面的代码
var test = [5,17,10,3]
test.sort(function(a,b){
Logger.log("a,b")
Logger.log(a,b)
Logger.log("a>b")
Logger.log(a>b)
return (a-b)
})
当我在第一次通过时使用断点调试代码时Logger.log("a,b")
,我的局部变量窗口会声明a = 17
和b = 5
。
谢谢!
解决方案
ECMAScript 标准没有说明sort
使用哪种特定算法。(其中一个较新的标准至少声明它应该是稳定排序。ES5 不需要这个。)
这意味着,从字面上看,任何东西都可能在幕后,并且compare
可以按任何顺序调用该函数。
当我需要了解数组中项目的原始顺序(强制进行稳定排序)时,我可以通过数组并添加一个新originalIndex
键供我的compare
函数使用。
因为您的示例使用的是原语,所以这不是一个简单的选择。
推荐阅读
- c++ - 计算字符串中有多少特定字符无法正常工作
- minecraft - Minecraft 1.15.2 的随机矿石生成问题
- java - 使用 CompletableFuture 时,HttpServletRequest 标头消失
- snowflake-cloud-data-platform - 雪花存储过程变量绑定错误
- xml - 动态地将孩子兄弟姐妹的价值观吸收到一个父母的文本中
- asp.net-core - SwaggerUI Asp.Net Core - 如何引用 .json 文件
- c++ - 线程池在一些循环后阻塞主线程
- java - 如何在自定义启动器中支持快捷方式固定?
- vb.net - 如何让我的 errProvider 正确显示?
- php - 使用外键 laravel 连接数据库表