如何在不显式列出字段的情况下合并两个 JSON 数组(基于键的左连接)

轻晨同学_2048

轻晨同学_2048

2026-05-22

658人浏览

原创

如何在不显式列出字段的情况下合并两个 JSON 数组(基于键的左连接)

本文介绍一种高效、可扩展的方式,将两个结构不同的 JSON 数组按关联键(如 "Pricing Reference Name" 与 "Part Num")自动合并,无需硬编码字段名,适用于动态数据源场景。

本文介绍一种高效、可扩展的方式,将两个结构不同的 json 数组按关联键(如 `"pricing reference name"` 与 `"part num"`)自动合并,无需硬编码字段名,适用于动态数据源场景。

在实际前端开发中,我们常需整合来自不同来源(如多个 Excel 表导出的 JSON)的数据。例如,一个包含产品详细信息的数组("Product Info"),和另一个包含价格信息的数组("Company Pricing"),二者通过业务键(如 Pricing Reference Name ↔ Part Num)关联。目标是执行一次稳健的左连接(Left Join):以产品信息为主表,将匹配的价格字段“无感”注入每条产品记录中,且不依赖预定义字段列表——因为字段可能随业务变化而增减。

核心思路是:空间换时间 + 解构赋值泛化。先将定价数据构建成 Map 索引(O(1) 查找),再遍历产品数组,对每项使用展开运算符 ... 合并匹配对象的所有自有属性。这种方式天然支持任意字段名,完全规避了手动遍历键名或编写冗长的 Object.assign() 列表。

以下是完整实现代码(兼容 Vue 3 Composition API 环境,如 useFetch 场景):

dmap-jsapi-skill
dmap-jsapi-skill

DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。

下载
// 假设 response._data 已解析为上述结构的对象
const mergeProductsWithPricing = (data) => {
  // 步骤 1:构建 Pricing Map,以 Part Num 为 key,整条定价对象为 value
  const pricingMap = new Map(
    data['Company Pricing'].map(item => [item['Part Num'], item])
  );

  // 步骤 2:主表映射 —— 对每个产品,合并其自身 + 匹配的定价数据(若存在)
  return data['Product Info'].map(product => {
    const pricingMatch = pricingMap.get(product['Pricing Reference Name']);
    // 若未找到匹配项,pricingMatch 为 undefined,{...undefined} 无副作用,安全
    return { ...product, ...(pricingMatch || {}) };
  });
};

// 在 useFetch 的 onResponse 中调用:
onResponse({ response }) {
  const mergedProducts = mergeProductsWithPricing(response._data);
  products.value = mergedProducts; // now each product has all pricing fields too
  isLoading.value = false;
});

✅ 优势说明:

  • 零字段硬编码:{ ...product, ...pricingMatch } 自动合并所有可枚举属性,新增字段(如 "MSRP CAD" 或 "In Stock")无需修改代码;
  • 高性能:Map 查找为 O(1),整体复杂度 O(n + m),远优于嵌套循环的 O(n×m);
  • 健壮容错:若某产品无对应 Pricing Reference Name,pricingMap.get() 返回 undefined,...(undefined || {}) 安全降级为空对象,不报错;
  • 语义清晰:逻辑聚焦于“关联”与“组合”,而非字段搬运,符合函数式思维。

⚠️ 注意事项:

  • 键名需严格一致(含空格、大小写),建议在数据接入层做标准化(如统一转为 kebab-case);
  • 若存在重复字段(如两个数组都有 "ID"),pricingMatch 的字段会覆盖 product 的同名字段(因展开顺序靠后),如有冲突需显式处理优先级;
  • Map 是 ES6+ 特性,确保目标环境支持(现代浏览器及 Node.js ≥ 12 均兼容)。

通过该模式,你获得的不再是一个静态拼接结果,而是一个可长期维护、随数据演进而自适应的通用合并函数——真正实现“一次编写,持续生效”。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2135

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3242

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1096

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

3699

7

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2880

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

360

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2713

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1161

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.8万人学习