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
相关产品推荐
相关产品推荐

