TL:博士
根据google docs , getResponseText() 应该返回一个字符串...但是当我尝试对它进行排序时,我收到一条消息,声称它是一个对象..嗯?
类型错误:无法在对象中找到函数排序
我的印象是 JavaScript 字符串有点像数组,而且它的行为似乎也像数组,因为 string[0] 返回字符串的第一个字母..
详细信息:
这是sheet我正在工作
大家好,我有一个非常独特的情况,我需要更新脏字符串(由不良的 OCR 导入提供)。
我创建了一个函数来完成这项工作,但需要额外的功能。
目前,流程如下:
- 输入您想要的字符串
- 检查每个单元格(在您选择的范围内)是否有该字符串
- 如果匹配率超过 50%,单元格将使用所需的字符串进行更新
检查的工作原理如下:
比较所需字符串的第一个字母(txtT[0]) 针对目标单元格的第一个字母(valT[0])
比较其他字母[x]直到最长字符串的长度
例如:
所需的字符串=“测试” 目标单元格=“t3st1ng”
循环是这样的:
创建一个数学积分系统 (总分=最长字符串的长度)
- 比较 t 和 t ...如果匹配,则加一分(在本例中为 +1,因为匹配)
- 比较e和3...如果匹配,则加一分(在本例中为+0,因为不匹配)
- 比较s和s...如果匹配,则加一分(在本例中为+1,因为匹配)
- 比较 t 和 t ...如果匹配,则加一分(在本例中为 +1,因为匹配)
- 比较 i 和 1 ...如果匹配,则加一分(在本例中为 +0,因为不匹配)
- 比较 n 和 n ...如果匹配,则加一分(在本例中为 +1,因为匹配)
- 比较 g 和 g ...如果匹配,则加一分(在本例中为 +1,因为匹配)
- 获得的积分/总积分 = 相似的百分比
该系统的问题在于 if 是基于每个字符串中字母的位置的。
这会在比较“testing”和“testing”等字符串时出现问题
我尝试更新它,以便它所做的第一件事是按字母顺序对字符串进行排序,忽略所有特殊字符和非字母字符。
这时我遇到了一个错误:
类型错误:在对象测试中找不到函数排序。
这没有意义,因为我想要的字符串是一个字符串。查看代码,其中显示“这是我收到错误的地方”:
根据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);
}
}
最佳答案
你不能用这种方式对字符串进行排序,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()文档
关于javascript - TypeError : Cannot find function "sort" in "object". ..但根据谷歌文档,所述对象应该是一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52744694/