TypeError: Невозможно найти функцию "sort" в "object" ... но указанный объект должен быть строкой в ​​соответствии с документацией Google - PullRequest
0 голосов
/ 10 октября 2018

TL: DR

Согласно google docs , getResponseText () должен возвращать строку ... но я получаю сообщение, в котором утверждается, что это объект, когда я пытаюсь отсортироватьэто .. а?

TypeError: Невозможно найти функцию сортировки в объекте

У меня сложилось впечатление, что строка javascript работает как массив, и похоже, что она ведет себя как единица, потому что string [0] возвращаетпервая буква строки ..

ДЕТАЛИ:

вот лист 1014 * Я работаю

Привет всем, у меня очень уникальная ситуация, когдаМне нужно обновить грязные строки (из-за нежелательного импорта OCR).

Я создал функцию, которая выполняет работу, но нуждается в дополнительной функциональности.

В настоящее время процесс идет следующим образом:

  1. введите желаемую строку
  2. каждая ячейка (по вашему выбору) проверяется на наличие этой строки
  3. ячейки обновляются нужной строкой, если совпадение превышает 50%

проверка работает следующим образом:

сравнивает первую букву желаемой строки (txtT [0]) с первой буквойцелевой клетки (valT [0])

сравнить дополнительные буквы [x] до длины самой длинной строки

, например:

желательноstring = "testing" target cell = "t3st1ng"

цикл выглядит следующим образом:

создание системы баллов для математики (общее количество баллов = длина самой длинной строки)

  • сравнить t и t ... при совпадении добавить одну точку (+1 в данном случае, поскольку она соответствует)
  • сравнить e и 3 ... при совпадении добавить одну точку (+0 в данном случае, поскольку она не соответствует)
  • сравнить с и s ... если соответствует, добавьте одну точку (+1 в этом случае, потому что она соответствует)
  • сравните t и t ... если соответствует, добавьте одну точку (+1 в данном случае, потому что она соответствует)
  • сравнить i и 1 ... если соответствует, добавьте одну точку (+0 в этомслучай, потому что он не совпадает)
  • сравнить n и n ... яДля соответствия, добавьте одну точку (+1 в данном случае, потому что она соответствует)
  • сравните g и g ... если соответствует, добавьте одну точку (+1в данном случае потому, что он совпадает)
  • набранных баллов / общее количество баллов =% от общего числа

Проблема с этой системой заключается в том, что если она основана на положении букв в каждой строке,

Это вызывает проблемы при сравнении строк, таких как «testing» и «test ing»

Я попытался обновить его так, чтобы первым делом он сортировал строку по алфавиту, игнорируя все специальные символыи не алфавитные символы.

Вот когда я наткнулся на ошибку:

TypeError: Невозможно найти функцию сортировки при тестировании объекта.

Это не имеет смысла, потому что моя желаемая строкаэто строкаПосмотрите код, где написано: «Вот где я получаю свою ошибку»:

Согласно google docs , getResponseText () должен возвращать строку ... но я не могу вызвать метод сортировкина строку .. что не имеет смысла!

function sandboxFunction() {
  try {

    var ui = SpreadsheetApp.getUi();

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var as = ss.getActiveSheet();
    var ar = as.getActiveRange();

    var sv = ui.prompt('enter desired string');
    var txt = sv.getResponseText();
    var txtT = txt.trim();
    txtT = txtT.replace(/ /g, ''); //this is the trimmed comparison string
    txtT = txtT.sort(); //***this is where I get my error***
    ui.alert(txtT);

    var vals = ar.getValues();

    for (var r = 0; r < vals.length; r++) {
      var row = vals[r];
      for (var c = 0; c < row.length; c++) {
        var val = row[c];
        var valT = val.trim();
        valT = valT.replace(/ /g, ''); // this is the trimmed comparison cell
        ui.alert(valT);

        //this is where we test the two

        //test length
        var tl = txtT.length;
        var vl = valT.length;
        if (vl < tl) {
          ui.alert("different lengths.. applying fix");
          for (vl; vl < tl; vl++) {
            valT = valT.concat("x");
            ui.alert(valT);
          }
        }
        else if (tl < vl) {
          ui.alert("different lengths.. applying fix");
          for (tl; tl < vl; tl++) {
            txtT = txtT.concat("x");
            ui.alert(txtT);
          }
        }


        if (valT.toUpperCase() == txtT.toUpperCase()) {
          ui.alert("your strings match");
        }
        else {
          var total = txtT.length;
          var pts = 0;
          for (var x = 0; x < total; x++) {
            if (valT[x] == txtT[x]) {
              pts++;
            }
          }
          if (pts / total >= 0.5) {
            ui.alert("at least 50% match, fixing text");
            vals[r][c] = txt;
          }
        }
      }
    }
    ar.setValues(vals);

  }
  catch (err) {
    ui.alert(err);
  }
}

1 Ответ

0 голосов
/ 10 октября 2018

Вы не можете отсортировать строку таким образом, sort - это метод массивов .Вы можете преобразовать вашу строку в массив, позже вы можете отсортировать

var txtT = "This is a string".trim();
txtT = txtT.replace(/ /g, ''); //this is the trimmed comparison string

var txtArray = txtT.split(''); // Convert to array
var txtSorted = txtArray.sort(); // Use sort method
console.log(txtSorted);

См. sort () документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...