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

如何按Group ID分组JavaScript对象并转换为指定结构?

按Group分组并转换JavaScript对象数组结构

我有如下JavaScript对象数组:

[
  {
    "id": "41e4858d-0478-4ffa-b39a-73db6f80c493",
    "price": 10,
    "class": "audi",
    "group": {
      "id": "group-1",
      "name": "Special"
    }
  },
  {
    "id": "d4ed6efe-3d95-4f19-9f34-16b1d62ee5f1",
    "price": 20,
    "class": "mercedess",
    "group": {
      "id": "group-1",
      "name": "Special"
    }
  },
  {
    "id": "a17a3671-09c4-411c-921f-a35705e86030",
    "price": 30,
    "class": "bmw",
    "group": {
      "id": "group-1",
      "name": "Special"
    }
  },
  {
    "id": "1bda1fe8-c326-46f4-851c-d06c686d1ebc",
    "price": 50,
    "class": "audi",
    "group": {
      "id": "group-2",
      "name": "Normal"
    }
  },
  {
    "id": "72300db9-c7f8-4bd6-af4a-f041e085bc6b",
    "price": 60,
    "class": "mercedess",
    "group": {
      "id": "group-2",
      "name": "Normal"
    }
  },
  {
    "id": "3fd3a054-3f97-4899-ba28-e1f22ba40bc8",
    "price": 70,
    "class": "bmw",
    "group": {
      "id": "group-2",
      "name": "Normal"
    }
  }
]

需要按group.id分组,转换为如下结构:

[
  {
    "id": "group-1",
    "name": "special",
    "mercedess": 20,
    "bmw": 30,
    "audi": 10
  },
  {
    "id": "group-2",
    "name": "normal",
    "mercedess": 60,
    "bmw": 70,
    "audi": 50
  }
]

注:你期望输出里的auid应为笔误,以下代码均按正确的audi字段处理。


原生JavaScript实现(使用reduce)

通过reduce先构建分组映射对象,再将其转换为目标数组:

const data = [/* 你的原始数组 */];

// 第一步:按group.id构建分组结构
const groupedMap = data.reduce((acc, item) => {
  const groupId = item.group.id;
  // 初始化分组基础信息
  if (!acc[groupId]) {
    acc[groupId] = {
      id: groupId,
      name: item.group.name.toLowerCase()
    };
  }
  // 将车型和价格绑定到对应分组
  acc[groupId][item.class] = item.price;
  return acc;
}, {});

// 第二步:将映射对象转为数组
const result = Object.values(groupedMap);
console.log(result);

Lodash实现

利用groupBy快速分组,再通过map和reduce处理每个分组的结构:

const _ = require('lodash'); // 或通过CDN引入lodash

const data = [/* 你的原始数组 */];

const result = _.chain(data)
  .groupBy('group.id')
  .map((items, groupId) => {
    // 基于分组第一个元素初始化基础结构
    const baseStructure = {
      id: groupId,
      name: items[0].group.name.toLowerCase()
    };
    // 遍历分组内元素,添加车型-价格键值对
    return items.reduce((acc, item) => {
      acc[item.class] = item.price;
      return acc;
    }, baseStructure);
  })
  .value();

console.log(result);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:12:09