遍历合并列数组,拆分元素至不同数组并过滤指定内容(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));
代码逻辑说明:
- 遍历数组时直接处理每个单元格值,避免中间数组的冗余操作
- 优先判断空值,满足“遇到空元素终止循环”的需求
- 通过
continue跳过不符合条件的元素,无需事后删除 - 拆分后直接将元素存入目标数组,同时去除前后空格保证结果整洁
- 最终输出的数组结构完全匹配预期要求
内容的提问来源于stack exchange,提问作者Shaik Naveed
相关产品推荐
相关产品推荐

