如何在谷歌应用程序脚本/谷歌电子表格中对2D数组进行排序

时间:2016-07-20 17:32:15

标签: google-apps-script google-sheets google-speech-api

我有一个谷歌电子表格,其中包含分布在不同列上的多个数据(如6列 - 电话号码,IMEI,URL,Id,Reg No和Time),我有15K行数据。

我必须在新的工作表中找到/显示所有重复的电话号码(第0列)和与之相关的数据。

然而,当我尝试对数据进行排序时,它会引发我的错误,如

"比较方法违反了其总合同。 (第6行,文件"代码")"

下面显示的代码供您参考:

function myFunction() {

  var values  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DUP').getDataRange().getValues()

  var dupData = new Array();

  values.sort(function sortFunction(a, b) {
    if (a[0] === b[0]) {
        return 0;
    }
    else {
        return (a[0] < b[0]) ? -1 : 1;
    }
});

  for(i=1;i<values.length;i++)
  {
    if (values[i][0] == values[i+1][0]) {
        dup.push(values[i]);
    }
  }

   var new1 = dpnum.getSheetByName('Test123');
  new1.getRange(1,1,dup.length,dup[0].length).setValues(dup);

}

1 个答案:

答案 0 :(得分:0)

您的代码可以像这样简化(代码注释):

function myFunction() {
  var values  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DUP').getDataRange().getValues()  
  var dupData = new Array();  
  values.sort(function(x,y){  // sort on first column
    var xp = x[0];
    var yp = y[0];
    return xp < yp ? -1 : xp > yp ? 1 : 0;// return 0 if equal, 1 if > and -1 if <
  });  
  for(var i=1 ; i<values.length ; i++){
    if (values[i-1][0] == values[i][0]) { // I changed the index as well to keep only valid data
      dup.push(values[i]);
    }
  } 
  var new1 = dpnum.getSheetByName('Test123');
  new1.getRange(1,1,dup.length,dup[0].length).setValues(dup);  
}