You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS统计数组词汇在多维数组中的出现次数及正则问题解决

数组词汇在多维数组中的出现次数统计解决方案

原代码的核心问题

  • 正则语法错误:当搜索词包含+、*这类正则特殊字符时,直接拼接会导致正则结构失效,触发Invalid regular expression报错;另外\b仅对字母数字等单词字符生效,对带空格、特殊符号的词组匹配不准确。
  • 性能崩溃:12k×20k的双重循环会产生2.4亿次迭代,加上每次循环创建新正则对象,内存占用飙升,必然导致溢出。

优化后的实现代码

利用Google Sheets内置的createTextFinderAPI,它不仅性能远高于手动循环,还能自动处理特殊字符匹配。修改后的代码如下:

function countSearchTerms() {
  // 替换为你的实际工作表名称
  const nGramsSht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("nGrams");
  const nGramFinalDataSht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("nGramFinalData");

  // 提取并清洗搜索词:二维数组转一维,过滤空值
  const filteredTerms = nGramsSht.getRange(6, 2, nGramsSht.getLastRow() - 5, 1)
    .getValues()
    .flat()
    .filter(term => term.toString().trim() !== '');

  // 提取并清洗待搜索数据:二维数组转一维,过滤空值
  const searchTermData = nGramFinalDataSht.getRange(1, 1, nGramFinalDataSht.getLastRow(), 1)
    .getValues()
    .flat()
    .filter(item => item.toString().trim() !== '');

  // 创建临时工作表存储待搜索数据,用于createTextFinder查询
  const tempSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();
  tempSheet.getRange(1, 1, searchTermData.length, 1).setValues(searchTermData.map(item => [item]));

  // 逐个统计每个搜索词的出现次数
  const occurrences = filteredTerms.map(term => {
    const textFinder = tempSheet.createTextFinder(term.toString())
      .matchEntireCell(false) // false=匹配单元格内包含该词的情况;true=仅匹配完全相同的单元格
      .matchCase(false) // 根据需求设置是否区分大小写
      .ignoreDiacritics(false); // 根据需求设置是否忽略变音符号
    return [textFinder.findAll().length];
  });

  // 删除临时工作表
  SpreadsheetApp.getActiveSpreadsheet().deleteSheet(tempSheet);

  // 将统计结果写入原表
  if (occurrences.length > 0) {
    nGramsSht.getRange(6, 3, nGramsSht.getLastRow() - 5, 1).clearContent();
    nGramsSht.getRange(6, 3, occurrences.length, 1).setValues(occurrences);
  }
}

关键修改点说明

  1. 数组格式转换:用flat()把Google Sheets返回的二维数组转成一维,简化后续处理逻辑。
  2. 临时表的作用:createTextFinder只能基于工作表范围操作,所以创建临时表存储待搜索数据,统计完成后立即删除,避免污染原数据。
  3. 匹配规则自定义:
    • matchEntireCell:控制是匹配单元格内包含词,还是仅匹配完全一致的单元格。
    • matchCase:设置是否区分大小写,根据业务需求调整。
  4. 性能与错误规避:createTextFinder是Google官方优化的API,比手动循环快数倍,同时自动处理正则特殊字符,彻底解决语法错误和内存溢出问题。

内容的提问来源于stack exchange,提问作者onit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:20:41