TL: DR
Согласно google docs , getResponseText () должен возвращать строку ... но я получаю сообщение, в котором утверждается, что это объект, когда я пытаюсь отсортироватьэто .. а?
TypeError: Невозможно найти функцию сортировки в объекте
У меня сложилось впечатление, что строка javascript работает как массив, и похоже, что она ведет себя как единица, потому что string [0] возвращаетпервая буква строки ..
ДЕТАЛИ:
вот лист 1014 * Я работаю
Привет всем, у меня очень уникальная ситуация, когдаМне нужно обновить грязные строки (из-за нежелательного импорта OCR).
Я создал функцию, которая выполняет работу, но нуждается в дополнительной функциональности.
В настоящее время процесс идет следующим образом:
- введите желаемую строку
- каждая ячейка (по вашему выбору) проверяется на наличие этой строки
- ячейки обновляются нужной строкой, если совпадение превышает 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);
}
}