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

如何使用reduce处理嵌套对象数组,筛选ICD主诊断数据?

从React项目的对象数组中提取主诊断ICD数据

我正在开发一个React项目,需要从对象数组中提取所需信息。数组中的每个条目包含Person字段,该字段下嵌套了Icds数组,其中存在标记为IsLeading=true的主诊断数据。我需要通过filter或reduce方法处理这个数组,要么得到仅包含主诊断ICD数据的数组,要么生成原数组的精简版——保留原条目结构,但仅保留每个条目中IsLeading=true的ICD数据。

示例数据

{"_id": "611cd9eae20bd167a796f884","BeforeAccJob": "Antennenbauer/-in","FuneralCost": 6,"FuneralCostWithSeverancePay": false,"FuneralCostSeverancePayDuration": 1,"FuneralCostDynamisationRate": 0.025,"FuneralCostCapitalisationRate": 0.025,"FuneralCostCostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"Miscellaneous": 300000.5,"MiscellaneousWithSeverancePay": false,"MiscellaneousSeverancePayDuration": 1,"MiscellaneousCapitalisationRate": 0.025,"MiscellaneousDynamisationRate": 0.025,"MiscellaneousCostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"__typename": "CalculationEntity","Person": {"_id": "P30081568","Firstname": "Nick","Lastname": "Fury","Birthday": "1976-10-10T00:00:00.000Z","MaritalStatus": "NotSet","Icds": [{"_id": 85071,"Mk": 3,"Code": "S72.0","ActineoText": "Schenkelhalsfraktur","Text": "Schenkelhalsfraktur","Status": "assured","IsLeading": false,"__typename": "ProcessICD"},{"_id": 85072,"Mk": 2,"Code": "T01.9","ActineoText": "Multiple offene Wunden, nicht näher bezeichnet","Text": "Multiple offene Wunden, nicht näher bezeichnet","Status": "assured","IsLeading": false,"__typename": "ProcessICD"},{"_id": 85073,"Mk": 3,"Code": "T08.0","ActineoText": "Fraktur der Wirbelsäule","Text": "Fraktur der Wirbelsäule, Höhe nicht näher bezeichnet: geschlossen","Status": "assured","IsLeading": false,"__typename": "ProcessICD"},{"_id": 85074,"Mk": 1,"Code": "J93.9","ActineoText": "Pneumothorax","Text": "Pneumothorax, nicht näher bezeichnet","Status": "assured","IsLeading": false,"__typename": "ProcessICD"},{"_id": 634234,"Mk": 1,"Code": "Z96.64","ActineoText": "Vorhandensein einer Hüftgelenkprothese","Text": "Vorhandensein einer Hüftgelenkprothese","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 634235,"Mk": 1,"Code": "M87.95","ActineoText": "Knochennekrose, nicht näher bezeichnet: Beckenregion und Oberschenkel","Text": "Knochennekrose, nicht näher bezeichnet: Beckenregion und Oberschenkel","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387916,"Mk": 3,"Code": "S32.01","ActineoText": null,"Text": "Fraktur eines Lendenwirbels: L1","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387917,"Mk": 3,"Code": "S32.02","ActineoText": null,"Text": "Fraktur eines Lendenwirbels: L2","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 610262,"Mk": 3,"Code": "S12.24","ActineoText": "Fraktur des 6. Halswirbels","Text": "Fraktur des 6. Halswirbels","Status": "unknown","IsLeading": true,"__typename": "ProcessICD"},{"_id": 387909,"Mk": 3,"Code": "S72.3","ActineoText": null,"Text": "Fraktur des Femurschaftes","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387908,"Mk": 4,"Code": "S71.88","ActineoText": null,"Text": "Weichteilschaden II. Grades bei offener Fraktur oder Luxation der Hüfte und des Oberschenkels","Status": "unknown","IsLeading": true,"__typename": "ProcessICD"},{"_id": 385884,"Mk": 1,"Code": "S71.1","ActineoText": null,"Text": "Offene Wunde des Oberschenkels","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387911,"Mk": 3,"Code": "S82.18","ActineoText": null,"Text": "Fraktur des proximalen Endes der Tibia: Sonstige","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387910,"Mk": 3,"Code": "S81.88","ActineoText": null,"Text": "Weichteilschaden II. Grades bei offener Fraktur oder Luxation des Unterschenkels","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 385887,"Mk": 1,"Code": "S81.0","ActineoText": null,"Text": "Offene Wunde des Knies","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 385888,"Mk": 3,"Code": "S82.38","ActineoText": null,"Text": "Distale Fraktur der Tibia: Sonstige","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 385889,"Mk": 3,"Code": "S82.5","ActineoText": null,"Text": "Fraktur des Innenknöchels","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387905,"Mk": 3,"Code": "S61.87","ActineoText": null,"Text": "Weichteilschaden I. Grades bei offener Fraktur oder Luxation des Handgelenkes und der Hand","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387906,"Mk": 2,"Code": "S62.31","ActineoText": null,"Text": "Fraktur eines sonstigen Mittelhandknochens: Basis","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387907,"Mk": 2,"Code": "S63.2","ActineoText": null,"Text": "Multiple Luxationen der Finger","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387912,"Mk": 3,"Code": "S82.31","ActineoText": null,"Text": "Distale Fraktur der Tibia: Mit Fraktur der Fibula (jeder Teil)","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387913,"Mk": 3,"Code": "S22.44","ActineoText": null,"Text": "Rippenserienfraktur: Mit Beteiligung von vier und mehr Rippen","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387914,"Mk": 3,"Code": "S22.20","ActineoText": null,"Text": "Fraktur des Sternums: Nicht näher bezeichnet","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"},{"_id": 387918,"Mk": 2,"Code": "D62","ActineoText": null,"Text": "Akute Blutungsanämie","Status": "unknown","IsLeading": false,"__typename": "ProcessICD"}],"__typename": "Person"},"Blocks": [{"Name": "PropertyDamageCost","IsRounded": false,"Coefficient": 1,"Sum": 1390,"WithSeverancePay": false,"SeverancePayDuration": 1,"CapitalisationRate": 0.025,"DynamisationRate": 1,"CostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"__typename": "CalculationBlock"},{"Name": "HealingTreatmentCost","IsRounded": false,"Coefficient": 1,"Sum": 200,"WithSeverancePay": false,"SeverancePayDuration": 1,"CapitalisationRate": 0.025,"DynamisationRate": 1,"CostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"__typename": "CalculationBlock"},{"Name": "IncomeCost","IsRounded": false,"Coefficient": 1,"Sum": 0,"WithSeverancePay": null,"SeverancePayDuration": null,"CapitalisationRate": 0.025,"DynamisationRate": 1,"CostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"__typename": "CalculationBlock"},{"Name": "HousekeepingDamageCost","IsRounded": false,"Coefficient": 1,"Sum": 0,"WithSeverancePay": false,"SeverancePayDuration": 1,"CapitalisationRate": 0.025,"DynamisationRate": 1,"CostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"__typename": "CalculationBlock"},{"Name": "IncreasedNeeds","IsRounded": false,"Coefficient": 1,"Sum": 0,"WithSeverancePay": false,"SeverancePayDuration": 1,"CapitalisationRate": 0.025,"DynamisationRate": 1,"CostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"__typename": "CalculationBlock"},{"Name": "DamageCost","IsRounded": false,"Coefficient": 1,"Sum": 0,"WithSeverancePay": false,"SeverancePayDuration": 1,"CapitalisationRate": 0.025,"DynamisationRate": 1,"CostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"__typename": "CalculationBlock"},{"Name": "SurvivorsPensionCost","IsRounded": false,"Coefficient": 1,"Sum": 0,"WithSeverancePay": false,"SeverancePayDuration": 1,"CapitalisationRate": 0.025,"DynamisationRate": 1,"CostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"__typename": "CalculationBlock"},{"Name": "MaintenanceDamageCost","IsRounded": false,"Coefficient": 1,"Sum": 0,"WithSeverancePay": false,"SeverancePayDuration": 1,"CapitalisationRate": 0.025,"DynamisationRate": 1,"CostSharingAgreement": {"Active": false,"Rate": 1,"Limit": 0,"Unlimited": false,"__typename": "CostSharingAgreement"},"__typename": "CalculationBlock"}]}

解决方案

方法1:提取所有主诊断ICD数据

如果只需要所有条目中的主诊断ICD对象,可以用flatMap配合filter:

const leadingIcds = originalArray.flatMap(item => 
  item.Person.Icds.filter(icd => icd.IsLeading === true)
);

或者用reduce实现:

const leadingIcds = originalArray.reduce((acc, item) => {
  const leading = item.Person.Icds.filter(icd => icd.IsLeading);
  return [...acc, ...leading];
}, []);

方法2:生成精简版原数组(保留结构,仅留主诊断Icds)

如果需要保留原数组的条目结构,但仅保留每个条目中的主诊断ICD数据,可以用map配合对象解构:

const simplifiedArray = originalArray.map(item => ({
  ...item,
  Person: {
    ...item.Person,
    Icds: item.Person.Icds.filter(icd => icd.IsLeading === true)
  }
}));

这种方式会创建原数组的副本,每个条目里的Person.Icds只包含IsLeading=true的诊断数据,其他字段保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:15:32