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

如何在Google Apps Script中删除'Terminé'行后的两行数据

问题描述

我有如下二维数组PLANNING_3D_RESP:

var PLANNING_3D_RESP = [
  ['Scénographie', true, true, true, true, 'Terminé', true, 'durée projet'],
  ['Scénographie', true, true, true, true, 'BK', true, 'date BAT'],
  ['Scénographie', true, true, true, true, 'BK', true, 'date BAP'],
  ['Plan tactile', false, false, false, false, 'En cours', true, 'durée projet'],
  ['Plan tactile', false, false, false, false, 'BK', true, 'date BAT'],
  ['Plan tactile', false, false, false, false, 'BK', true, 'date BAP'],
  ['Maquette tactile bâtiment', false, false, false, false, 'Terminé', true, 'durée projet'],
  ['Maquette tactile bâtiment', false, false, false, false, 'BK', true, 'date BAT'],
  ['Maquette tactile bâtiment', false, false, false, false, 'BK', true, 'date BAP']
]

需求是:当某行第6个元素(索引5)为"Terminé"时,删除该行之后的两行数据,最终得到目标数组:

var PLANNING_3D_RESP = [
  ['Scénographie', true, true, true, true, 'Terminé', true, 'durée projet'],
  ['Plan tactile', false, false, false, false, 'En cours', true, 'durée projet'],
  ['Plan tactile', false, false, false, false, 'BK', true, 'date BAT'],
  ['Plan tactile', false, false, false, false, 'BK', true, 'date BAP'],
  ['Maquette tactile bâtiment', false, false, false, false, 'Terminé', true, 'durée projet'],
]

我尝试用filter方法但没找到思路,写了下面的代码却无法实现需求,请问这段代码有什么问题?

function myFunction() {
  var PLANNING_3D_RESP = [
  ['Scénographie', true, true, true, true, 'Terminé', true, 'durée projet'],
  ['Scénographie', true, true, true, true, 'BK', true, 'date BAT'],
  ['Scénographie', true, true, true, true, 'BK', true, 'date BAP'],
  ['Plan tactile', false, false, false, false, 'En cours', true, 'durée projet'],
  ['Plan tactile', false, false, false, false, 'BK', true, 'date BAT'],
  ['Plan tactile', false, false, false, false, 'BK', true, 'date BAP'],
  ['Maquette tactile bâtiment', false, false, false, false, 'Terminé', true, 'durée projet'],
  ['Maquette tactile bâtiment', false, false, false, false, 'BK', true, 'date BAT'],
  ['Maquette tactile bâtiment', false, false, false, false, 'BK', true, 'date BAP']
]
  

  var PLANNING_3D_CLEAN = PLANNING_3D_RESP;
  for (let i = 0; i < PLANNING_3D_CLEAN.length; i++) {
    if (PLANNING_3D_RESP[i][5] == "Terminé") {
      PLANNING_3D_RESP.filter(i => 1 + i);
      PLANNING_3D_RESP.filter(i => 2 + i);

    }
  }


Logger.log (PLANNING_3D_RESP)
Logger.log (PLANNING_3D_CLEAN)
}
代码问题分析

你的代码存在三个核心问题:

  1. 数组引用赋值无效:var PLANNING_3D_CLEAN = PLANNING_3D_RESP; 只是让两个变量指向同一个数组,没有创建副本,且后续代码完全没利用这个变量做有效操作。
  2. filter方法完全误用:
    • filter是返回新数组的纯方法,不会修改原数组,你直接调用却不接收返回值,等于白执行。
    • 回调函数i => 1 + i逻辑错误,filter需要返回布尔值判断是否保留元素,这里的数值会被转为true,等于保留所有元素,根本达不到删除后续两行的目的。
  3. 循环逻辑漏洞:即使正确删除元素,正向循环会因为数组长度变化导致索引错乱,比如删除元素后后续元素前移,循环会跳过部分内容。
正确实现方案

方法1:构建新数组(推荐,不修改原数组)

通过标记需要跳过的行数,遍历原数组筛选出符合要求的元素:

function myFunction() {
  var PLANNING_3D_RESP = [
    ['Scénographie', true, true, true, true, 'Terminé', true, 'durée projet'],
    ['Scénographie', true, true, true, true, 'BK', true, 'date BAT'],
    ['Scénographie', true, true, true, true, 'BK', true, 'date BAP'],
    ['Plan tactile', false, false, false, false, 'En cours', true, 'durée projet'],
    ['Plan tactile', false, false, false, false, 'BK', true, 'date BAT'],
    ['Plan tactile', false, false, false, false, 'BK', true, 'date BAP'],
    ['Maquette tactile bâtiment', false, false, false, false, 'Terminé', true, 'durée projet'],
    ['Maquette tactile bâtiment', false, false, false, false, 'BK', true, 'date BAT'],
    ['Maquette tactile bâtiment', false, false, false, false, 'BK', true, 'date BAP']
  ];

  var PLANNING_3D_CLEAN = [];
  let skipCount = 0;

  for (let i = 0; i < PLANNING_3D_RESP.length; i++) {
    if (skipCount > 0) {
      skipCount--;
      continue;
    }
    const currentRow = PLANNING_3D_RESP[i];
    PLANNING_3D_CLEAN.push(currentRow);
    // 遇到Terminé,标记后续2行跳过
    if (currentRow[5] === "Terminé") {
      skipCount = 2;
    }
  }

  Logger.log(PLANNING_3D_CLEAN);
}

方法2:直接修改原数组(反向遍历)

如果需要直接修改原数组,用反向遍历避免索引错乱:

function myFunction() {
  var PLANNING_3D_RESP = [
    ['Scénographie', true, true, true, true, 'Terminé', true, 'durée projet'],
    ['Scénographie', true, true, true, true, 'BK', true, 'date BAT'],
    ['Scénographie', true, true, true, true, 'BK', true, 'date BAP'],
    ['Plan tactile', false, false, false, false, 'En cours', true, 'durée projet'],
    ['Plan tactile', false, false, false, false, 'BK', true, 'date BAT'],
    ['Plan tactile', false, false, false, false, 'BK', true, 'date BAP'],
    ['Maquette tactile bâtiment', false, false, false, false, 'Terminé', true, 'durée projet'],
    ['Maquette tactile bâtiment', false, false, false, false, 'BK', true, 'date BAT'],
    ['Maquette tactile bâtiment', false, false, false, false, 'BK', true, 'date BAP']
  ];

  // 反向遍历,删除Terminé行之后的两行
  for (let i = PLANNING_3D_RESP.length - 1; i >= 0; i--) {
    if (i >= 2 && PLANNING_3D_RESP[i-2][5] === "Terminé") {
      PLANNING_3D_RESP.splice(i, 1);
    }
  }

  Logger.log(PLANNING_3D_RESP);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:24:53