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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:05:20