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

JS合并数组对象:按语言合并并重构属性结构

按语言合并对象的实现方案

针对你需要将数组中对象按lang分组,并把field转为属性名、text转为对应值的需求,这里提供两种实用实现方式:

方式一:使用reduce(推荐)

reduce天生适配这类分组合并场景,代码简洁紧凑:

const originalArray = [
  {"field": "name","lang": "it","text": "RegoleAziendali"},
  {"field": "pdf_url","lang": "it", "text": "docs/it/file.pdf"},
  {"field": "name","lang": "en","text": "CompanyRules"},
  {"field": "pdf_url","lang": "en", "text": "docs/en/file.pdf"}
];

const mergedArray = Object.values(originalArray.reduce((acc, current) => {
  const langKey = current.lang;
  // 首次遇到该语言时,初始化对应对象
  if (!acc[langKey]) {
    acc[langKey] = { lang: langKey };
  }
  // 将field作为属性名、text作为属性值存入对应语言对象
  acc[langKey][current.field] = current.text;
  return acc;
}, {}));

console.log(mergedArray);

方式二:使用forEach

如果更习惯forEach的写法,只需维护一个临时语言映射对象即可:

const originalArray = [/* 原数组内容 */];
const langMap = {};

originalArray.forEach(item => {
  const { lang, field, text } = item;
  // 初始化当前语言的对象
  if (!langMap[lang]) {
    langMap[lang] = { lang };
  }
  // 赋值对应的属性键值对
  langMap[lang][field] = text;
});

// 将映射对象转换为目标数组
const mergedArray = Object.values(langMap);

两种方式最终都会输出你预期的结果:

[
  {"lang": "it","name": "RegoleAziendali","pdf_url":"docs/it/file.pdf"},
  {"lang": "en","name": "CompanyRules","pdf_url":"docs/en/file.pdf"}
]

核心逻辑一致:

  1. 以lang作为分组标识,聚合同语言的对象
  2. 将每个元素的field转为新对象的属性名,text转为对应属性值
  3. 最后将聚合后的映射结构转为数组格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:05:19