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

如何将对象数组转换为按属性类别聚合的新对象数组

解决数组对象的同类型属性聚合问题

我来帮你搞定这个数组转换的需求!先看看你原来的代码问题:你当前的写法是把每个data里的键值对都单独生成了一个带index键的对象,完全没有做同类型属性的聚合,所以才得到了一堆零散的小对象。

下面是能得到你预期结果的解决方案,我会一步步解释:

思路

核心是先把所有同前缀(比如center、storage、system)的键值对归类到同一个对象里,最后再把这些分类好的对象转换成数组。

实现代码

let array = [{ data: { center1: "1", storage1: "1", system1: "1", } }, { data: { center2: "2", storage2: "2", system2: "2", } } ];

// 用一个对象来临时存储同类型的属性分组
const groupedData = {};

// 遍历原数组中的每一项
array.forEach(item => {
  // 取出当前项的data对象,遍历它的所有键值对
  Object.entries(item.data).forEach(([key, value]) => {
    // 提取键的前缀(比如从center1中拿到center)
    const type = key.replace(/\d+$/, '');
    // 如果该类型还没有对应的分组对象,就创建一个
    if (!groupedData[type]) {
      groupedData[type] = {};
    }
    // 将当前键值对添加到对应类型的分组对象中
    groupedData[type][key] = value;
  });
});

// 把分组对象的所有值提取出来,组成最终的数组
const result = Object.values(groupedData);
console.log(result);

代码解释

  1. groupedData对象:用来临时存放不同类型的属性组,比如groupedData.center会收集所有center1、center2这类键值对。
  2. 提取前缀:用key.replace(/\d+$/, '')去掉键末尾的数字,得到属性的类型前缀(比如center1变成center)。
  3. 填充分组对象:每遍历到一个键值对,就把它放到对应的分组对象里。
  4. 转换为数组:最后用Object.values(groupedData)把分组对象里的所有值(也就是我们需要的每个聚合对象)提取成数组,就得到了你想要的结果。

运行这段代码后,输出的结果就是:

[ { center1: "1", center2: "2"}, { storage1: "1", storage2: "2"}, { system1: "1", system2: "2"} ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:12:32