javascript - Google Apps 脚本 - “indexOf”方法的使用
问题描述
第一:我真的很努力相处,但我更多的是支持者而不是程序员。
我在 Google Calc 中输入了一些文本,并想检查“Mueller, Klaus”的出现次数(在数据范围内出现 5 次)。该工作表包含 941 行和 1 列(“A”)。
这是我要找出的代码:
function countKlaus() {
// Aktives Spreadsheet auswählen
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Aktives Tabellenblatt auswählen
var sheet = ss.getSheetByName("Tabellenblatt1");
var start = 1;
var end = sheet.getLastRow();
var data = sheet.getRange(start,1,end,1).getValues();
var curRow = start;
var cntKlaus = 0;
for( x in data )
{
var value = daten[x];
//ui.alert(value);
if(value.indexOf("Mueller, Klaus")> -1){
cntKlaus = cntKlaus + 1;
}
}
ui.alert(cntKlaus);
}
结果消息是“0”,但应该是“5”。
解决方案
问题:
您非常接近解决方案,除了以下两个问题:
daten[x]
应替换为data[x]
.ui.alert(cntKlaus)
应替换为SpreadsheetApp.getUi().alert(cntKlaus)
.
解决方案(由我优化) - 推荐:
function countKlaus() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("Tabellenblatt1");
const cntKlaus = sheet
.getRange('A1:A' + sheet.getLastRow())
.getValues()
.flat()
.filter(r=>r.includes("Mueller, Klaus"))
.length;
SpreadsheetApp.getUi().alert(cntKlaus);
}
您可以忽略此术语+ sheet.getLastRow()
,因为我们正在过滤非空白值。但我认为首先使用更少的数据来使用过滤器会更快。
参考:
- flat:将二维数组转换为一维数组。
- 过滤器:仅过滤
"Mueller, Klaus"
. - Array.prototype.length:获取过滤后数据的长度,也就是想要的结果。
- 包括:检查是否
Mueller, Klaus
包含在文本中。
奖金信息
仅供参考,如果这对您很重要,我的解决方案可以用一行代码重写:
SpreadsheetApp.getUi().alert(SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tabellenblatt1").getRange('A1:A').getValues().flat().filter(r=>r.includes("Mueller, Klaus")).length);
推荐阅读
- clojure - 我可以使用 Clojure 规范验证函数吗?
- matlab - 如何解决这个 Matlab App Designer 错误?
- ruby-on-rails - Rails 6 图像上传到数字海洋空间
- python - 解析具有多个子项的 xml
- c - 在recvfrom 和socket 之后使用connect
- docker - Docker rm 无法删除所有容器
- shell - 从 cron 运行脚本但错误为找不到文件
- html - 如何在 HTML 页面的其余部分中获得完全相同的文本字体
- python - PyQt5 有错误 'MainWindow' 没有属性 'exec_'
- javascript - 反应链接范围滑块值