Метод сравнения нарушает его общий договор.(строка 953, файл "logashgs", проект "LodashGS") - PullRequest
0 голосов
/ 16 февраля 2019

enter image description here

Я использую скрипт приложения на листе Google, и я добавил библиотеку 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 работать для ключа, содержащего числа?

edit: пример my_rows:

[{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},{..},..]

edit2:

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

enter image description here

1 Ответ

0 голосов
/ 18 февраля 2019

Как насчет этой модификации?

Точки модификации:

  • Я подумал, что причиной ошибки может быть sheet2Json(sheet).
    • Когда я вижу var range = sheet.getRange(HeaderRow, 1, sheet.getLastRow(), sheet.getLastColumn()), данные извлекаются путем включения строки заголовка.
    • Как насчет извлечения только основного диапазона данных?

Модифицированный скрипт:

Пожалуйста, измените sheet2Json(sheet) следующим образом и повторите попытку.

С:
var range = sheet.getRange(HeaderRow, 1, sheet.getLastRow(), sheet.getLastColumn());
Кому:
var range = sheet.getRange(HeaderRow + 1, 1, sheet.getLastRow(), sheet.getLastColumn());

Примечание:

  • Конечно, я думаю, что цикл for также может быть изменен для этой ситуации.Но я подумал, что получение основных данных может подойти для вашего сценария, потому что titleColumns уже получено.
...