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

如何基于指定属性合并对象数组中的对象属性

修正基于name合并对象数组的JavaScript代码

原代码的问题在于,遍历对象属性时直接覆盖累加器中的对应属性,导致后面对象的空值会覆盖前面的有效值,最终无法保留所有非空的属性信息。

修正方案

在合并属性时,只保留非空的属性值:当累加器中当前属性为空,或者当前对象的属性值不为空时,更新累加器中的对应属性,确保所有有效值都被保留。

修正后的完整代码

const obj = [{
    "name": "A. Nasila",
    "adm": "",
    "class": "4p",
    "mat": "80",
    "eng": "",
    "kis": ""
  },
  {
    "name": "A. Nasila",
    "adm": "4886",
    "class": "",
    "mat": "",
    "eng": "",
    "kis": "39"
  },
  {
    "name": "Mtu Bure",
    "adm": "",
    "class": "3L",
    "mat": "",
    "eng": "86",
    "kis": ""
  },
  {
    "name": "A. Nasila",
    "adm": "",
    "class": "",
    "mat": "",
    "eng": "75",
    "kis": ""
  },
  {
    "name": "Mtu Bure",
    "adm": "9790",
    "class": "",
    "mat": "77",
    "eng": "",
    "kis": "76"
  }
];

const groupedData = obj.reduce((acc, cur) => {
  const name = cur.name;
  // 初始化当前name对应的对象,若不存在则克隆当前对象
  if (!acc[name]) {
    acc[name] = {...cur};
  } else {
    // 遍历属性,仅保留非空值
    for (const key in cur) {
      if (cur[key] !== "") {
        acc[name][key] = cur[key];
      }
    }
  }
  return acc;
}, {});

const result = Object.values(groupedData);
// 格式化JSON输出,增加可读性
const jsonObject = JSON.stringify(result, null, 2);

const div = document.getElementById("students");
const span = document.createElement("span");
span.innerHTML = jsonObject;
div.appendChild(span);

对应的HTML代码无需修改:

<div id="students">
</div>

运行后即可得到你期望的合并结果,所有同name的对象会合并为一个,保留每个属性的非空有效值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:32:41