在Google Apps Script中比较两个字典并提取匹配值对应键
问题:匹配两个字典的值并提取对应键
我有两个字典:
old = { C43: 'X13', C59: 'X13', C75: 'X14', C91: 'X14', C107: 'X16', C123: 'X17' }
old 可以包含任意数量的条目。
另一个字典:
new = { C139: 'X17' }
new 也可以包含任意数量的条目。
我需要匹配两个字典的值,把old中与new的值匹配的键提取到新数组,期望输出:
new_array = [ 'C123' ]
我尝试了以下代码,但没得到正确结果:
var new_array = []; for (var key in old) { var check_matching_value = old[key] === new[key] if (check_matching_value == true) { new_array.push(key); } } console.log(matchingKeys);
错误分析
- 匹配逻辑错误:
old[key] === new[key]是拿old当前键的值,和new中相同键的值做比较,但你要的是匹配new里的所有值,而非相同键对应的值。比如new里的键是C139,old中没有这个键,new[key]会返回undefined,永远无法匹配。 - 变量名错误:最后打印的
matchingKeys根本没定义,应该打印你声明的new_array。
正确解法
先把new字典里的所有值提取为一个集合(集合的查找效率更高),再遍历old字典,判断每个值是否在这个集合中,符合条件的键就加入结果数组。
写法一:for循环
const old = { C43: 'X13', C59: 'X13', C75: 'X14', C91: 'X14', C107: 'X16', C123: 'X17' }; const newDict = { C139: 'X17' }; // 避免用new做变量名,它是JS关键字 // 提取new字典的所有值存入集合 const newValues = new Set(Object.values(newDict)); const new_array = []; for (const key in old) { if (newValues.has(old[key])) { new_array.push(key); } } console.log(new_array); // 输出: [ 'C123' ]
写法二:数组方法简化
const old = { C43: 'X13', C59: 'X13', C75: 'X14', C91: 'X14', C107: 'X16', C123: 'X17' }; const newDict = { C139: 'X17' }; const newValues = new Set(Object.values(newDict)); const new_array = Object.keys(old).filter(key => newValues.has(old[key])); console.log(new_array); // 输出: [ 'C123' ]
内容的提问来源于stack exchange,提问作者Shaik Naveed
相关产品推荐
相关产品推荐

