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

Google Apps Script中数组与对象匹配并清除不匹配项问题

问题需求

我有一个二维数组:

R1_val_Y = [ [ '' ],
  [ 'suboption name2-charge1-Monthly-10' ],
  [ 'suboption name3-charge2-Monthly-10' ],
  [ '' ],
  [ '' ],
  [ '' ],
  [ '' ],
  [ '' ],
  [ '' ],
  [ '' ],
  [ '' ],
  [ '' ],
  [ '' ],
  [ '' ],
  [ '' ] ]

还有一个对象:

R1_val_strikethrough_Y =
{ 'suboption name2-charge1-Monthly-10': 'Y14',
  'suboption name3-charge2-Monthly-10': 'Y15',
  'text1-text2-text3-text4': 'Y28' }

需要从R1_val_strikethrough_Y中移除所有**不在R1_val_Y有效条目(非空字符串)**里的键值对,预期输出是:

R1_val_strikethrough_Y =
{ 'suboption name2-charge1-Monthly-10': 'Y14',
  'suboption name3-charge2-Monthly-10': 'Y15' }

原有代码的问题

第一段代码的问题

  • 变量名错误:定义了keys1却使用keys[k],直接导致keys未定义报错
  • 逻辑完全错误:用for...in遍历数组,拿数组元素和keys对应索引值对比,数组里大量空字符串,会错误删除有效键

第二段代码的问题

逻辑搞反了:这段代码是删除数组里存在的有效键,和需求完全相反——我们要删的是不在数组有效条目里的键

正确解决方案

方案1:直接修改原对象

先把数组里的非空有效键提取成集合(查找效率更高),再遍历对象删除无效键:

// 提取数组中的非空有效键
const validKeys = new Set(R1_val_Y.map(item => item[0]).filter(key => key !== ''));

// 遍历对象删除不在有效集合里的键
for (const key in R1_val_strikethrough_Y) {
  if (!validKeys.has(key)) {
    delete R1_val_strikethrough_Y[key];
  }
}

// 输出结果
console.log(R1_val_strikethrough_Y);

方案2:生成新对象(不修改原对象)

如果不想改动原对象,用Object.fromEntries生成新的过滤后对象:

const validKeys = new Set(R1_val_Y.map(item => item[0]).filter(key => key !== ''));
const filteredObj = Object.fromEntries(
  Object.entries(R1_val_strikethrough_Y).filter(([key]) => validKeys.has(key))
);

console.log(filteredObj);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:34:56