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

JS技术咨询:如何将相同对象值推入数组及处理指定JSON

解决你遇到的两个JavaScript问题

嘿,我来帮你搞定这两个开发中遇到的问题!

问题1:将相同的对象值推入数组

这里分两种常见的场景,我分别给出解决方案:

场景1:生成包含多个独立对象副本的数组

如果你想创建一个数组,里面是同一个对象的多个独立副本(注意:如果直接用Array.fill(),所有元素会指向同一个对象引用,修改一个会影响全部),可以用Array.from()或者map来生成:

// 原始对象
const baseObj = { label: "Example", value: 456 };

// 生成包含3个独立副本的数组
const objArray = Array.from({ length: 3 }, () => ({ ...baseObj }));

// 或者用map的方式
const objArray2 = new Array(3).fill(null).map(() => ({ ...baseObj }));

这样每个对象都是独立的,修改其中一个不会影响其他元素。

场景2:按对象属性值分组,将同属性值的对象推入同一个数组

如果是要把原数组中属性值相同的对象归类到子数组里,用reduce就能轻松实现:

const sampleData = [{ type: "fruit" }, { type: "vegetable" }, { type: "fruit" }];
const groupedData = sampleData.reduce((acc, item) => {
  const key = item.type;
  // 如果当前分组不存在,初始化一个空数组
  if (!acc[key]) acc[key] = [];
  // 将当前对象推入对应分组
  acc[key].push(item);
  return acc;
}, {});

// 结果:{ fruit: [ { type: "fruit" }, { type: "fruit" } ], vegetable: [ { type: "vegetable" } ] }

问题2:处理给定的JSON数据结构

先看你提供的原始数据:

[
  { "value": "Osteonecrosis", "Diagnosis_Code": "DIAG002", "NamaCategory": "Primary Category", "FK_Diagnosis_Content_ID": 2 },
  { "value": "Malunion", "Diagnosis_Code": "DIAG002", "NamaCategory": "Healing", "FK_Diagnosis_Content_ID": 19 },
  { "value": "Osteonecrosis", "Diagnosis_Code": "DIAG004", "NamaCategory": "Primary Category", "FK_Diagnosis_Content_ID": 2 },
  { "value": "Malunion", "Diagnosis_Code": "DIAG004", "NamaCategory": "Healing" }
]

我猜你大概率是想按Diagnosis_Code来分组,把同一个诊断代码下的所有分类信息整理在一起。用reduce就能实现这个需求:

const rawDiagnosisData = [
  { "value": "Osteonecrosis", "Diagnosis_Code": "DIAG002", "NamaCategory": "Primary Category", "FK_Diagnosis_Content_ID": 2 },
  { "value": "Malunion", "Diagnosis_Code": "DIAG002", "NamaCategory": "Healing", "FK_Diagnosis_Content_ID": 19 },
  { "value": "Osteonecrosis", "Diagnosis_Code": "DIAG004", "NamaCategory": "Primary Category", "FK_Diagnosis_Content_ID": 2 },
  { "value": "Malunion", "Diagnosis_Code": "DIAG004", "NamaCategory": "Healing" }
];

// 按Diagnosis_Code分组处理
const processedData = rawDiagnosisData.reduce((acc, item) => {
  const code = item.Diagnosis_Code;
  // 初始化当前诊断代码的结构
  if (!acc[code]) {
    acc[code] = {
      diagnosisCode: code,
      categories: []
    };
  }
  // 将分类信息加入对应数组
  acc[code].categories.push({
    categoryName: item.NamaCategory,
    diagnosisValue: item.value,
    contentId: item.FK_Diagnosis_Content_ID
  });
  return acc;
}, {});

// 如果需要转换成数组格式(而非对象)
const resultArray = Object.values(processedData);

处理后的resultArray结构会非常清晰:

[
  {
    "diagnosisCode": "DIAG002",
    "categories": [
      { "categoryName": "Primary Category", "diagnosisValue": "Osteonecrosis", "contentId": 2 },
      { "categoryName": "Healing", "diagnosisValue": "Malunion", "contentId": 19 }
    ]
  },
  {
    "diagnosisCode": "DIAG004",
    "categories": [
      { "categoryName": "Primary Category", "diagnosisValue": "Osteonecrosis", "contentId": 2 },
      { "categoryName": "Healing", "diagnosisValue": "Malunion", "contentId": undefined }
    ]
  }
]

如果你的需求不是分组,而是去重、合并属性等其他操作,可以补充说明,但这个分组应该是最贴合你给出的数据结构的常见需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:50:54