首页 > 解决方案 > 在检查时再次排序二维数组排序

问题描述

我正在使用 Google 表格并尝试使用 Google Apps 脚本确认某个范围按姓氏排序(第二列)。
但是,第二列中有重复项,并且在执行检查时,数据会在检查之前重新排序,翻转姓氏匹配的行的位置,此时列表不匹配。
例如,Sheets 范围如下:

弗里达 阿科斯塔
秋天 阿科斯塔
埃德加 安徒生
凯拉 安徒生
拉斐尔 安德拉德
乔纳森 安德鲁斯
丹妮尔 射手

如您所见,行 {1,2} 和 {3,4} 具有相同的姓氏。但是我已经从表格中对姓氏的数据进行了排序,所以这应该是正确的。但是,当我运行代码时,它会使用并翻转它们,以便排序为:

秋天 阿科斯塔
弗里达 阿科斯塔
凯拉 安徒生
埃德加 安徒生
拉斐尔 安德拉德
乔纳森 安德鲁斯
丹妮尔 射手

现在,显然,它们不匹配。

如何检查二维数组是否在单个列上排序,而不会在尝试重新排序数组时发生这种情况?

function myFunction() {
  const ss = SpreadsheetApp.getActive().getActiveSheet();
  let a1 = ss.getRange(4,1,502,5).getValues();
  let a2 = JSON.stringify(a1);
  a1.sort((a, b) => a[1] > b[1] ? 1 : -1);
  Logger.log(JSON.stringify(a1) == a2);
}

测试表

标签: javascriptarrayssortinggoogle-apps-scriptgoogle-sheets

解决方案


解决方案:

基本上你的方法,但没有? 1 : -1

function myFunction() {
  const ss = SpreadsheetApp.getActive().getActiveSheet();
  let a1 = ss.getRange(4,1,502,5).getValues();
  let a2 = JSON.stringify(a1);
  a1.sort((a, b) => a[1] > b[1] );
  console.log(a1);
}

或者:

function myFunction() {
  const ss = SpreadsheetApp.getActive().getActiveSheet();
  let a1 = ss.getRange(4,1,502,5).getValues();
  let a2 = JSON.stringify(a1);
  a1.sort((a, b) => a[1].localeCompare(b[1]));
  console.log(a1);
}

参考:

String.prototype.localeCompare()


推荐阅读