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

遍历合并列数组,拆分元素至不同数组并过滤指定内容(Google Apps Script)

问题描述

背景:我有一个由两列合并为一列生成的数组,已通过以下代码获取列范围及值:

var a1_range = To_check.getRange("A2:A");
var a1_val = a1_range.getValues();

需求:读取整列值,将拆分后的第一个元素存入数组a1,第二个元素存入数组a2,需满足以下规则:

  • 跳过包含“Included”的合并元素
  • 跳过包含“Flat Mon”的合并元素
  • 遇到合并元素长度为0时终止循环

我尝试了以下代码,但未得到预期结果:

a1_arr= [];
  for (var j in a1_val){
    if(a1_val[j][0].split("-").length==2){
      a1_arr.push(BillFUOM_val[j][0]);
    }
    else{ 
      break;}
  }
  
  for (var j in a1_arr){
    var check_inluded = a1_arr[j].includes("Included");
    if(check_inluded==true){
      a1_arr.splice(j);
    }
  }
for (var j in a1_arr){
    var check_flat = a1_arr[j].includes("Flat Mon");
    if(check_flat==true){
      a1_arr.splice(j);
    }
  }

  var a1_arr_split = a1_arr.toString().split("-");
  var a1 = [];
  a1_arr_split.forEach(function(q){a1.push([q]);});
  Logger.log(a1);

预期结果:
数组a1为:

[GGG,Comms+ Excess]

数组a2为对应第二个元素:

[Yearly,Monthly]

解决方案

原代码存在几处关键问题:错误引用变量、splice使用不当、拆分逻辑破坏元素结构、未正确处理终止条件。以下是修正后的代码:

var a1 = [];
var a2 = [];

for (var j = 0; j < a1_val.length; j++) {
  const currentVal = a1_val[j][0];
  
  // 遇到空值直接终止循环
  if (!currentVal || currentVal.trim().length === 0) {
    break;
  }
  
  // 跳过包含指定关键词的元素
  if (currentVal.includes("Included") || currentVal.includes("Flat Mon")) {
    continue;
  }
  
  // 拆分元素并存入对应数组
  const parts = currentVal.split("-");
  if (parts.length === 2) {
    a1.push(parts[0].trim());
    a2.push(parts[1].trim());
  }
}

Logger.log("a1: " + JSON.stringify(a1));
Logger.log("a2: " + JSON.stringify(a2));

代码逻辑说明:

  1. 遍历数组时直接处理每个单元格值,避免中间数组的冗余操作
  2. 优先判断空值,满足“遇到空元素终止循环”的需求
  3. 通过continue跳过不符合条件的元素,无需事后删除
  4. 拆分后直接将元素存入目标数组,同时去除前后空格保证结果整洁
  5. 最终输出的数组结构完全匹配预期要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:25:18