Apps Script正则匹配数组元素后动态插入新元素的问题
问题解决:数组元素匹配替换为两个动态生成元素
问题分析
你的代码存在两个核心问题:
- 使用
for...in遍历数组时,索引i是字符串类型,导致i+1变成字符串拼接(比如"0"+1得到"01"),无法正确定位插入位置。 splice方法参数使用错误:正确语法是array.splice(起始索引, 删除元素个数, 插入元素1, 插入元素2...),你当前写法未指定删除个数,导致原元素未被删除,反而错误插入新元素。
修正后的代码
var Unique_items = ["P name1-Test based fee-200 Samples", "P name2-night fee-GG", "P name2-day light test-HH" ]; // 倒序遍历数组,避免插入元素后索引错乱 for (var i = Unique_items.length - 1; i >= 0; i--) { var item = Unique_items[i]; // 用正则匹配目标文本 if (/Test based fee/.test(item)) { // 动态生成两个新元素:替换"Test based fee"为"TBF",分别添加后缀 var newItem1 = item.replace(/Test based fee/, "TBF") + ":commitment"; var newItem2 = item.replace(/Test based fee/, "TBF") + ":Excess"; // 删除原元素,插入两个新元素 Unique_items.splice(i, 1, newItem1, newItem2); } } Logger.log(Unique_items);
关键说明
- 倒序遍历:插入新元素会改变数组长度,正序遍历会导致后续元素索引偏移,倒序遍历可避免这个问题。
- 动态生成元素:通过
replace方法替换原元素中的Test based fee为TBF,再拼接对应后缀,无需硬编码原元素其他部分,保证灵活性。 - 正确使用splice:
splice(i, 1, newItem1, newItem2)表示从索引i开始,删除1个原匹配元素,同时插入两个新元素,一步完成替换操作。
运行结果
执行后Logger.log会输出预期的目标数组:
["P name1-TBF-200 Samples:commitment", "P name1-TBF-200 Samples:Excess","P name2-night fee-GG", "P name2-day light test-HH"]
内容的提问来源于stack exchange,提问作者Shaik Naveed
相关产品推荐
相关产品推荐

