首页 > 解决方案 > 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 = 17b = 5

我是否完全误解了我查看的两个文档 来源?

谢谢!

标签: javascriptgoogle-apps-script

解决方案


ECMAScript 标准没有说明sort使用哪种特定算法。(其中一个较新的标准至少声明它应该是稳定排序。ES5 不需要这个。)

这意味着,从字面上看,任何东西都可能在幕后,并且compare可以按任何顺序调用该函数。

当我需要了解数组中项目的原始顺序(强制进行稳定排序)时,我可以通过数组并添加一个新originalIndex键供我的compare函数使用。

因为您的示例使用的是原语,所以这不是一个简单的选择。


推荐阅读