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

如何基于不同键名对比两个对象数组并提取匹配项?

解决方案

核心思路是先把第一个数组的匹配规则转换成便于快速查找的结构,再用filter遍历第二个数组完成匹配:

  1. 构建匹配键集合:将第一个数组中每个元素的invoice和number拼接成唯一标识字符串,存入Set(查找效率远高于数组)。
  2. 过滤目标数组:遍历第二个数组,将每个元素的AccountNum和StatusCode拼接成相同格式的字符串,检查是否存在于之前的Set中,存在则保留该元素。

代码示例

// 匹配规则数组
const matchRules = [{"invoice":"500","number":"2"},{"invoice":"500","number":"1"}];
// 待过滤的目标数组
const targetArray = [{"iNumber":"0312","parentInvcNum":null,"billDate":"2023-03-12T00:00:00Z","billingAddress":"KING NB","AccountNum":"50078887","status":"L","StatusCode":"2"},{"iNumber":"0332","parentInvcNum":null,"billDate":"2023-03-12T00:00:00Z","billingAddress":"KING MB","AccountNum":"50073287","status":"K","StatusCode":"1"}];

// 生成匹配键集合
const matchKeys = new Set(matchRules.map(item => `${item.invoice}-${item.number}`));

// 过滤目标数组
const matchedItems = targetArray.filter(item => {
  const currentKey = `${item.AccountNum}-${item.StatusCode}`;
  return matchKeys.has(currentKey);
});

console.log(matchedItems);

补充说明

  • 使用Set存储匹配键是因为has()方法的时间复杂度为O(1),数据量大时比数组includes()的O(n)效率高很多。
  • 你提供的示例数据中,第一个数组的invoice值为"500",但第二个数组的AccountNum是"50078887"这类带后缀的值,所以示例代码运行后会返回空数组,实际使用时需要根据真实数据调整匹配的键值内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:27:19