javascript - TypeError : Cannot find function "sort" in "object". ..但根据谷歌文档,所述对象应该是一个字符串

标签 javascript arrays string object google-apps-script

TL:博士

根据google docs , getResponseText() 应该返回一个字符串...但是当我尝试对它进行排序时,我收到一条消息,声称它是一个对象..嗯?

类型错误:无法在对象中找到函数排序

我的印象是 JavaScript 字符串有点像数组,而且它的行为似乎也像数组,因为 string[0] 返回字符串的第一个字母..

详细信息:

这是sheet我正在工作

大家好,我有一个非常独特的情况,我需要更新脏字符串(由不良的 OCR 导入提供)。

我创建了一个函数来完成这项工作,但需要额外的功能。

目前,流程如下:

  1. 输入您想要的字符串
  2. 检查每个单元格(在您选择的范围内)是否有该字符串
  3. 如果匹配率超过 50%,单元格将使用所需的字符串进行更新

检查的工作原理如下:

比较所需字符串的第一个字母(txtT[0]) 针对目标单元格的第一个字母(valT[0])

比较其他字母[x]直到最长字符串的长度

例如:

所需的字符串=“测试” 目标单元格=“t3st1ng”

循环是这样的:

创建一个数学积分系统 (总分=最长字符串的长度)

  • 比较 tt ...如果匹配,则加一分(在本例中为 +1,因为匹配)
  • 比较e3...如果匹配,则加一分(在本例中为+0,因为不匹配)
  • 比较ss...如果匹配,则加一分(在本例中为+1,因为匹配)
  • 比较 tt ...如果匹配,则加一分(在本例中为 +1,因为匹配)
  • 比较 i1 ...如果匹配,则加一分(在本例中为 +0,因为不匹配)
  • 比较 nn ...如果匹配,则加一分(在本例中为 +1,因为匹配)
  • 比较 gg ...如果匹配,则加一分(在本例中为 +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/

相关文章:

javascript - Javascript 中的替换函数有问题

javascript - jQuery - 将多个选择的下拉值存储在数组中

java - 如何 "crossover"两个字符串 (1234 & abcd -> 12cd & ab34)

带有初始化列表的 C++ 的 max() 返回乱序的字符串

javascript - 如何拥有多个 'and' 逻辑运算符和一个 'or' 逻辑运算符

javascript - react-router "Cannot read property ' push' of undefined"

Javascript 以循环方式遍历 12 部分数组

c - !s || 是什么意思!* 是什么意思? (s 是字符*)

C++ 字符串到/从文件

javascript - 为什么我的函数只将 SRC 属性应用于第一个上传的图像?