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

在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);

错误分析

  1. 匹配逻辑错误:old[key] === new[key] 是拿old当前键的值,和new中相同键的值做比较,但你要的是匹配new里的所有值,而非相同键对应的值。比如new里的键是C139,old中没有这个键,new[key]会返回undefined,永远无法匹配。
  2. 变量名错误:最后打印的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:55:41