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

Google Apps Script中二维列表格式异常及去重问题求解

问题与解决方案

问题背景

处理表格中编辑者(editors)和市场(markets)数据时,编写JonSnow函数后得到的editor列表为[[Name1],[Name2],[Name1]]格式,导致[...new Set(editor)]无法有效去重,期望得到一维数组["Name1","Name2","Name1"]。

三个问题的解答

  1. 格式名称:这是二维数组(具体是由多个单元素一维数组组成的二维数组)。

  2. 生成原因:
    Google Apps Script的getDisplayValues()方法返回的是二维数组结构——外层数组对应表格的行,每个内层数组对应该行的单元格值。即使只选取单列(如示例中的J列),每一行的单元格值也会被包装为一个单元素数组,因此遍历data时,val本身就是一个单元素数组,直接push到editor里就会形成二维数组。

  3. 修复/避免方法:
    有两种常用方式解决:

  • 方式一:遍历取子数组的第一个元素
    在editor.push(val)处改为editor.push(val[0]),直接提取单元格的文本值存入数组:
editor.push(val[0])
market.push(markett)
  • 方式二:提前扁平化二维数组
    在获取data后,用flat()方法将二维数组转为一维数组,后续遍历直接处理单个值:
var data = range.getDisplayValues().flat();

修改后遍历逻辑中,val就直接是单元格文本值,无需再取值。

另外,去重时因为数组元素变为字符串,[...new Set(editor)]就能正常工作,得到唯一编辑者列表。

修正后的完整代码

function JonSnow() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("XX!J1:J114");
  var data = range.getDisplayValues();
  Logger.log(JSON.stringify(data));
  const editor = [];
  const market = [];

  data.forEach( (val, index) =>{
    // 取子数组的第一个元素作为判断值
    const editorName = val[0];
    if(editorName != "None - regular editor" && editorName != "N/A" && editorName != "Cov?" && editorName != "" && editorName != "None - no cross-market coverage for this task"){
      let markett; // 声明变量,避免全局污染
      if(index >= 2 && index <= 12){
        markett = "Dach";
      }else if (index >= 15 && index <= 30) {
        markett = "Dutch";
      }else if (index >= 32 && index <= 48) {
        markett = "French";
      }else if (index >= 52 && index <= 64) {
        markett = "Italian";
      }else if (index >= 67 && index <= 74) {
        markett = "Nordics";
      }else if (index >= 77 && index <= 92) {
        markett = "polish";
      }else if (index >= 95 && index <= 114) {
        markett = "Uk";
      };
      editor.push(editorName)
      market.push(markett)
    } else {
      return;
    };
  });
  Logger.log(editor);
  Logger.log(market);
  const edunique = [...new Set(editor)];
  Logger.log(edunique); // 新增日志查看去重结果
}

注:代码中还修复了markett未声明的问题,避免全局变量污染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:10:20