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

如何将JSON对象数组按LaneID分组并生成带Cameras的指定结构?

解决方案

你需要调整分组后的结果转换逻辑,将原函数返回的键值对对象转换为目标数组结构。以下是修改后的代码:

const groupBy = prop => data => {
  // 第一步:按指定属性分组,收集对应的摄像头信息
  const groupedData = data.reduce((dict, item) => {
    // 解构出分组属性、不需要的PlazaID,剩下的就是摄像头信息
    const { [prop]: groupKey, PlazaID, ...cameraInfo } = item;
    // 往对应分组里添加摄像头信息
    dict[groupKey] = [...(dict[groupKey] || []), cameraInfo];
    return dict;
  }, {});

  // 第二步:将分组对象转换为目标数组结构
  return Object.entries(groupedData).map(([key, cameras]) => ({
    [prop]: Number(key), // 将字符串键转回数字类型
    Cameras: cameras
  }));
};

// 测试数据
var data = [
    { PlazaID: 1, LaneID: 2, CamID: 3, CamDesc: 'Camera - 3' },
    { PlazaID: 1, LaneID: 2, CamID: 4, CamDesc: 'Camera - 4' },
    { PlazaID: 1, LaneID: 3, CamID: 3, CamDesc: 'Camera - 3' },
    { PlazaID: 1, LaneID: 3, CamID: 4, CamDesc: 'Camera - 4' },
];

// 调用函数
const result = groupBy('LaneID')(data);
console.log(result);

代码说明

  1. 分组逻辑:通过reduce遍历数组,按指定属性(这里是LaneID)分组,同时剔除不需要的PlazaID,只保留摄像头相关信息存入分组数组。
  2. 结构转换:使用Object.entries将分组后的键值对对象转为数组,再通过map构造每个元素的结构——包含分组属性(如LaneID)和对应的Cameras数组。
  3. 类型修正:由于对象键默认是字符串,通过Number(key)将其转回数字类型,与原数据类型保持一致。

执行后将得到你期望的输出结构:

[
    { LaneID: 2, Cameras: [{ CamID: 3, CamDesc: 'Camera - 3' }, { CamID: 4, CamDesc: 'Camera - 4' }] },
    { LaneID: 3, Cameras: [{ CamID: 3, CamDesc: 'Camera - 3' }, { CamID: 4, CamDesc: 'Camera - 4' }] }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:53:17