代码之家  ›  专栏  ›  技术社区  ›  user1592380

比较法违反了它的总合同。(第953行,文件“日志”,项目“日志”)

  •  0
  • user1592380  · 技术社区  · 7 年前

    enter image description here

    我在谷歌工作表中使用应用程序脚本,并添加了lodash库。我有以下代码:

      var sheet =    SpreadsheetApp.openById(id).getSheetByName('mysheet');
      var my_rows = sheet2Json(sheet) // USE THIS RATHER THAN OTHERS - BETTER JSON PRODUCED
    
      var data = _.sortBy(my_rows, 'Index');
    

    哪里:

    function sheet2Json(sheet) { 
    
      var HeaderRow = sheet.getFrozenRows(); // THIS SHOULD GET HEADER ROW   
      var titleColumns = sheet.getDataRange().offset(HeaderRow-1, 0, 1).getValues()[0];
    
      var lastRow = sheet.getLastRow();
      var rowValues = [];
    
    
      var colStartIndex = 1;
      var rowNum = 1;
      //    var range = sheet.getRange(rowIndex, colStartIndex, rowNum, sheet.getLastColumn());
      var range = sheet.getRange(HeaderRow, 1, sheet.getLastRow(), sheet.getLastColumn());
    
      var rowValues = range.getValues();
    
      var jsonArray = [];
      for(var i=0; i<rowValues.length; i++) {
        var line = rowValues[i];
        var json = new Object();
        for(var j=0; j<titleColumns.length; j++) {
          json[titleColumns[j]] = line[j];
        }      
        json['relativeRow'] = i; //DATA AFTER HEADER ROW
        jsonArray.push(json);
      }
    
      return jsonArray;
    
    }
    

    sheet2Json函数创建一个对象数组,每行一个对象。我想按索引编号对行进行排序。如果我将“索引”列格式化为文本,它就会工作。但是,如果我将列格式化为数字格式(这是正确排序所需的),我会得到:

    Comparison method violates its general contract. (line 953, file "logashgs", project "LodashGS")
    

    如何让sortby函数对包含数字的键起作用?

    编辑:my_行的一个示例是:

    [{relativeRow=11.0,  Index=2115.0, Email=  dfgdfg@dsfsd.com , completed=, Name=  dfdsf dsfdsfdsf , last_contacted=INVALIDNUM, date_time=Thu Dec 06 00:30:16 GMT-05:00 2018,  campaign=, Phone Number=1},{..},..]
    

    编辑2:

    https://github.com/lodash/lodash/blob/3ac4b261e4a920a07673d49edfb84bd317f449f7/dist/lodash.js

    enter image description here

    0 回复  |  直到 7 年前
        1
  •  1
  •   Tanaike    7 年前

    这次修改怎么样?

    修改点:

    • 我认为错误的原因可能是 sheet2Json(sheet) .
      • 当我看到 var range = sheet.getRange(HeaderRow, 1, sheet.getLastRow(), sheet.getLastColumn()) ,通过包含标题行来检索数据。
      • 只检索主数据范围如何?

    修改脚本:

    请修改 sheet2Json(工作表) 如下所示,然后重试。

    发件人:
    var range = sheet.getRange(HeaderRow, 1, sheet.getLastRow(), sheet.getLastColumn());
    
    致:
    var range = sheet.getRange(HeaderRow + 1, 1, sheet.getLastRow(), sheet.getLastColumn());
    

    注:

    • 当然,我认为for循环也可以针对这种情况进行修改。但我认为检索主要数据可能适合您的脚本,因为 titleColumns 已经找回了。