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

如何比较两行列表并将匹配行替换为第三列表对应行?

解决列表整行匹配替换问题

需求说明

需要对比LISTE_PROJ和INFOS_PROJETS两个二维列表,当LISTE_PROJ中的某一行与INFOS_PROJETS中的某一行完全匹配时,将LISTE_PROJ中的该行替换为INFOS_PROJETSPOURCENTS中对应位置的行。

示例数据

// 原始列表
var LISTE_PROJ = [
  ['Scénographie', true, true, true, true, true],
  ['Plan tactile', false, false, false, false, true],
  ['Maquette tactile bâtiment', false, false, false, false, true],
  ['Maquette tactile bâtiment', false, false, false, false, false]
];

// 匹配参照列表
var INFOS_PROJETS = [
  ['Plan tactile', false, false, false, false, true],
  ['Maquette tactile bâtiment', false, false, false, false, true]
];

// 替换用列表(与INFOS_PROJETS行一一对应)
var INFOS_PROJETSPOURCENTS = [
  [0.15,'NONE', 0.35,'NONE', 0.4, 0.1],
  [0.15,'NONE', 0.35,'NONE', 0.5,'NONE']
];

期望输出

var NEW_LISTE_PROJ = [
  ['Scénographie', true, true, true, true, true],
  [0.15,'NONE', 0.35,'NONE', 0.4, 0.1],
  [0.15,'NONE', 0.35,'NONE', 0.5,'NONE'],
  ['Maquette tactile bâtiment', false, false, false, false, false]
];

现有问题

  1. 仅能比较行的第一列,无法实现整行完全匹配;
  2. 日志输出次数不符合预期(出现6次"OK");
  3. 未将结果存入NEW_LISTE_PROJ变量供后续使用。

解决方案代码

function REPART() {
  var LISTE_PROJ = [
    ['Scénographie', true, true, true, true, true],
    ['Plan tactile', false, false, false, false, true],
    ['Maquette tactile bâtiment', false, false, false, false, true],
    ['Maquette tactile bâtiment', false, false, false, false, false]
  ];
  var INFOS_PROJETS = [
    ['Plan tactile', false, false, false, false, true],
    ['Maquette tactile bâtiment', false, false, false, false, true]
  ];
  var INFOS_PROJETSPOURCENTS = [
    [0.15,'NONE', 0.35,'NONE', 0.4, 0.1],
    [0.15,'NONE', 0.35,'NONE', 0.5,'NONE']
  ];
  
  // 辅助函数:判断两个行数组是否完全匹配
  function rowsMatch(row1, row2) {
    if (row1.length !== row2.length) return false;
    for (var i = 0; i < row1.length; i++) {
      if (row1[i] !== row2[i]) return false;
    }
    return true;
  }
  
  var NEW_LISTE_PROJ = [];
  
  // 遍历原始列表的每一行
  for (var i = 0; i < LISTE_PROJ.length; i++) {
    var currentRow = LISTE_PROJ[i];
    var matched = false;
    
    // 遍历参照列表找匹配项
    for (var j = 0; j < INFOS_PROJETS.length; j++) {
      if (rowsMatch(currentRow, INFOS_PROJETS[j])) {
        // 找到匹配,替换为对应百分比行
        NEW_LISTE_PROJ.push(INFOS_PROJETSPOURCENTS[j]);
        Logger.log("OK - 行" + i + "匹配成功");
        matched = true;
        break; // 找到匹配就跳出内层循环,避免重复匹配
      }
    }
    
    // 没有找到匹配,保留原行
    if (!matched) {
      NEW_LISTE_PROJ.push(currentRow);
    }
  }
  
  // 输出结果到日志,也可直接返回NEW_LISTE_PROJ供后续使用
  Logger.log(NEW_LISTE_PROJ);
  return NEW_LISTE_PROJ;
}

问题解决说明

  1. 整行匹配实现:新增rowsMatch辅助函数,先判断两行长度是否一致,再逐元素对比,确保整行内容完全相同才判定匹配,避免了toString()方法可能因元素含特殊字符导致的误判。
  2. 日志输出优化:仅在找到匹配行时输出一次"OK",且通过break跳出内层循环,避免同一行多次匹配重复输出。
  3. 结果存入变量:创建NEW_LISTE_PROJ数组,遍历过程中按规则添加替换后的行或原行,最终可直接使用该变量,也可通过return返回供其他函数调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:26:26