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
相关产品推荐
相关产品推荐

