Home > OS >  React JS: Remove duplicates by values from object array inside reduce
React JS: Remove duplicates by values from object array inside reduce

Time:10-19

I am currently working on a react project together with antd. I receive data and calculations from customers, which I have to fill inside a table. For this, I map the data inside an object array in this form:

const personTableData = filteredCalc.map((calc, index) => ({
    key: index,
    personName: `${calc.Person.Firstname} ${calc.Person.Lastname}`,
    personBirthday: <FormattedDate value={calc.Person.Birthday} />,
    personMaritalStatus: checkMaritalStatus(calc.Person.MaritalStatus),
    jobBeforeAccident: calc.BeforeAccJob || noData,
    leadingDiagnosis:...
        ))
      : noData,
  }));

I have multiple calculations, where the customer and his main information stays the same. I want to remove duplicates by Firstname Lastname and the corresponding id.

For example, I receive something like this:

[{Firstname: 'Billy', Lastname:'Johnson', '_id: 2, Age: 15, ...},
{Firstname: 'Billy', Lastname:'Johnson', '_id: 5, Age: 24, ...},
{Firstname: 'Billy', Lastname:'Johnson', '_id: 5, Age: 24, ...},
{Firstname: 'Ashley', Lastname:'Johnson', '_id: 9, Age: 15, ...}]

I want to get something like this (remove if same NAME and ID):

[{Firstname: 'Billy', Lastname:'Johnson', '_id: 2, Age: 15, ...},
{Firstname: 'Billy', Lastname:'Johnson', '_id: 5, Age: 24, ...},
{Firstname: 'Ashley', Lastname:'Johnson', '_id: 9, Age: 15, ...}]

I already have a reducer function, that filters out what I need. What can I extend here, to remove duplicates with Firstname Lastname & ID ?

 const filteredCalc = allPersonsDetails.calculations.reduce(
    (reducer, calc) => {
      // check if Person has any Icds element has IsLeading === true
      const filtered = calc.Person.Icds.filter((icd) => icd.IsLeading === true);
      // use current calc and replace with filtered Icds
      const newData = { ...calc, Person: { ...calc.Person, Icds: filtered } };
      reducer.push(newData);
      // always return the reducer array
      return reducer;
    },
    []
  );

This is the object array, I use the reduce function on:

[
    {
        "_id": "62ea6a81b7f32a7497ebdb70",
        "BeforeAccJob": "",
        "Person": {
            "_id": "T1145350",
            "Firstname": "Udo",
            "Lastname": "Kirschenbaum",
            "Birthday": "1950-04-16T22:00:00.000Z",
            "MaritalStatus": "NotSet",
            "Icds": [
                {
                    "_id": 912386,
                    "Mk": 2,
                    "Code": "S92.3",
                    "ActineoText": "Fraktur der Mittelfußknochen",
                    "Text": "Fraktur der Mittelfußknochen",
                    "Status": "assured",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912387,
                    "Mk": 2,
                    "Code": "S52.50",
                    "ActineoText": "Distale Fraktur des Radius",
                    "Text": "Distale Fraktur des Radius: Nicht näher bezeichnet",
                    "Status": "assured",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912388,
                    "Mk": 3,
                    "Code": "S22.2",
                    "ActineoText": "Fraktur des Sternums",
                    "Text": "Fraktur des Sternums",
                    "Status": "assured",
                    "IsLeading": true,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912389,
                    "Mk": 3,
                    "Code": "S22.44",
                    "ActineoText": "Rippenserienfraktur (4 oder mehr)",
                    "Text": "Rippenserienfraktur: Mit Beteiligung von vier und mehr Rippen",
                    "Status": "assured",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912390,
                    "Mk": 2,
                    "Code": "S27.31",
                    "ActineoText": "Prellung und Hämatom der Lunge",
                    "Text": "Prellung und Hämatom der Lunge",
                    "Status": "assured",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912391,
                    "Mk": 2,
                    "Code": "S39.9",
                    "ActineoText": "Verletzung abdominal, lumbosakral und/oder Becken",
                    "Text": "Nicht näher bezeichnete Verletzung des Abdomens, der Lumbosakralgegend und des Beckens",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912392,
                    "Mk": 1,
                    "Code": "R58",
                    "ActineoText": "Blutung",
                    "Text": "Blutung, anderenorts nicht klassifiziert",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912393,
                    "Mk": 1,
                    "Code": "T14.1",
                    "ActineoText": "Offene Wunde an einer nicht näher bezeichneten Körperregion",
                    "Text": "Offene Wunde an einer nicht näher bezeichneten Körperregion",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912394,
                    "Mk": 1,
                    "Code": "R23.8",
                    "ActineoText": "Sonstige und nicht näher bezeichnete Hautveränderungen",
                    "Text": "Sonstige und nicht näher bezeichnete Hautveränderungen",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912395,
                    "Mk": 3,
                    "Code": "S37.00",
                    "ActineoText": "Verletzung der Niere, nicht näher bezeichnet",
                    "Text": "Verletzung der Niere, nicht näher bezeichnet",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912396,
                    "Mk": 3,
                    "Code": "S62.3",
                    "ActineoText": "Fraktur im Bereich der Hand",
                    "Text": "Fraktur sonstiger und nicht näher bezeichneter Teile des Handgelenkes und der Hand",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 920670,
                    "Mk": 3,
                    "Code": "S37.03",
                    "ActineoText": "Komplette Ruptur des Nierenparenchyms",
                    "Text": "Komplette Ruptur des Nierenparenchyms",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 920671,
                    "Mk": 2,
                    "Code": "S52.51",
                    "ActineoText": "Distale Fraktur des Radius: Extensionsfraktur",
                    "Text": "Distale Fraktur des Radius: Extensionsfraktur",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 920663,
                    "Mk": 1,
                    "Code": "S51.9",
                    "ActineoText": "Offene Wunde des Unterarmes, Teil nicht näher bezeichnet",
                    "Text": "Offene Wunde des Unterarmes, Teil nicht näher bezeichnet",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 920665,
                    "Mk": 1,
                    "Code": "J90",
                    "ActineoText": "Pleuraerguss",
                    "Text": "Pleuraerguss, anderenorts nicht klassifiziert",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                }
            ],
            "__typename": "Person"
        },
        "__typename": "CalculationEntity"
    },
    {
        "_id": "61b23b256cc8961a3445dc63",
        "BeforeAccJob": "",
        "Person": {
            "_id": "T1056702",
            "Firstname": "Olaf",
            "Lastname": "Kirschenbaum",
            "Birthday": "1979-12-13T23:00:00.000Z",
            "MaritalStatus": "NotSet",
            "Icds": [
                {
                    "_id": 922613,
                    "Mk": 3,
                    "Code": "S92.0",
                    "ActineoText": "Fraktur des Kalkaneus",
                    "Text": "Fraktur des Kalkaneus",
                    "Status": "unknown",
                    "IsLeading": true,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 922614,
                    "Mk": 2,
                    "Code": "S92.3",
                    "ActineoText": "Fraktur der Mittelfußknochen",
                    "Text": "Fraktur der Mittelfußknochen",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 922616,
                    "Mk": 3,
                    "Code": "S22.2",
                    "ActineoText": "Fraktur des Sternums",
                    "Text": "Fraktur des Sternums",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                }
            ],
            "__typename": "Person"
        },
        "__typename": "CalculationEntity"
    },
    {
        "_id": "630492a8f71829079d52d22b",
        "BeforeAccJob": "",
        "Person": {
            "_id": "C34177",
            "Firstname": "",
            "Lastname": "",
            "Birthday": "2022-08-23T06:42:02.316Z",
            "MaritalStatus": "NotSet",
            "Icds": [],
            "__typename": "Person"
        },
        "__typename": "CalculationEntity"
    },
    {
        "_id": "630492b8f71829079d52d2af",
        "BeforeAccJob": "",
        "Person": {
            "_id": "C52679",
            "Firstname": "",
            "Lastname": "",
            "Birthday": "2022-08-23T06:42:02.316Z",
            "MaritalStatus": "NotSet",
            "Icds": [],
            "__typename": "Person"
        },
        "__typename": "CalculationEntity"
    },
    {
        "_id": "61b23b346cc8961a3445dca5",
        "BeforeAccJob": "",
        "Person": {
            "_id": "T1145350",
            "Firstname": "Udo",
            "Lastname": "Kirschenbaum",
            "Birthday": "1950-04-16T22:00:00.000Z",
            "MaritalStatus": "NotSet",
            "Icds": [
                {
                    "_id": 912386,
                    "Mk": 2,
                    "Code": "S92.3",
                    "ActineoText": "Fraktur der Mittelfußknochen",
                    "Text": "Fraktur der Mittelfußknochen",
                    "Status": "assured",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912387,
                    "Mk": 2,
                    "Code": "S52.50",
                    "ActineoText": "Distale Fraktur des Radius",
                    "Text": "Distale Fraktur des Radius: Nicht näher bezeichnet",
                    "Status": "assured",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912388,
                    "Mk": 3,
                    "Code": "S22.2",
                    "ActineoText": "Fraktur des Sternums",
                    "Text": "Fraktur des Sternums",
                    "Status": "assured",
                    "IsLeading": true,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912389,
                    "Mk": 3,
                    "Code": "S22.44",
                    "ActineoText": "Rippenserienfraktur (4 oder mehr)",
                    "Text": "Rippenserienfraktur: Mit Beteiligung von vier und mehr Rippen",
                    "Status": "assured",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912390,
                    "Mk": 2,
                    "Code": "S27.31",
                    "ActineoText": "Prellung und Hämatom der Lunge",
                    "Text": "Prellung und Hämatom der Lunge",
                    "Status": "assured",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912391,
                    "Mk": 2,
                    "Code": "S39.9",
                    "ActineoText": "Verletzung abdominal, lumbosakral und/oder Becken",
                    "Text": "Nicht näher bezeichnete Verletzung des Abdomens, der Lumbosakralgegend und des Beckens",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912392,
                    "Mk": 1,
                    "Code": "R58",
                    "ActineoText": "Blutung",
                    "Text": "Blutung, anderenorts nicht klassifiziert",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912393,
                    "Mk": 1,
                    "Code": "T14.1",
                    "ActineoText": "Offene Wunde an einer nicht näher bezeichneten Körperregion",
                    "Text": "Offene Wunde an einer nicht näher bezeichneten Körperregion",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912394,
                    "Mk": 1,
                    "Code": "R23.8",
                    "ActineoText": "Sonstige und nicht näher bezeichnete Hautveränderungen",
                    "Text": "Sonstige und nicht näher bezeichnete Hautveränderungen",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912395,
                    "Mk": 3,
                    "Code": "S37.00",
                    "ActineoText": "Verletzung der Niere, nicht näher bezeichnet",
                    "Text": "Verletzung der Niere, nicht näher bezeichnet",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 912396,
                    "Mk": 3,
                    "Code": "S62.3",
                    "ActineoText": "Fraktur im Bereich der Hand",
                    "Text": "Fraktur sonstiger und nicht näher bezeichneter Teile des Handgelenkes und der Hand",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 920670,
                    "Mk": 3,
                    "Code": "S37.03",
                    "ActineoText": "Komplette Ruptur des Nierenparenchyms",
                    "Text": "Komplette Ruptur des Nierenparenchyms",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 920671,
                    "Mk": 2,
                    "Code": "S52.51",
                    "ActineoText": "Distale Fraktur des Radius: Extensionsfraktur",
                    "Text": "Distale Fraktur des Radius: Extensionsfraktur",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 920663,
                    "Mk": 1,
                    "Code": "S51.9",
                    "ActineoText": "Offene Wunde des Unterarmes, Teil nicht näher bezeichnet",
                    "Text": "Offene Wunde des Unterarmes, Teil nicht näher bezeichnet",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                },
                {
                    "_id": 920665,
                    "Mk": 1,
                    "Code": "J90",
                    "ActineoText": "Pleuraerguss",
                    "Text": "Pleuraerguss, anderenorts nicht klassifiziert",
                    "Status": "unknown",
                    "IsLeading": false,
                    "__typename": "ProcessICD"
                }
            ],
            "__typename": "Person"
        },
        "__typename": "CalculationEntity"
    }
]

As you can see, I get the same persons multiple times inside my table: table

CodePudding user response:

I think _id field is unique, so you don't need to use firstname lastname in condition. You can use find inside reducer to look if accumulator has the entity with the same _id. If not - add it to accumulator.

const data = [
  {
    _id: '62ea6a81b7f32a7497ebdb70',
    BeforeAccJob: '',
    Person: {
      _id: 'T1145350',
      Firstname: 'Udo',
      Lastname: 'Kirschenbaum',
      Birthday: '1950-04-16T22:00:00.000Z',
      MaritalStatus: 'NotSet',
      Icds: [
        {
          _id: 912386,
          Mk: 2,
          Code: 'S92.3',
          ActineoText: 'Fraktur der Mittelfußknochen',
          Text: 'Fraktur der Mittelfußknochen',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912387,
          Mk: 2,
          Code: 'S52.50',
          ActineoText: 'Distale Fraktur des Radius',
          Text: 'Distale Fraktur des Radius: Nicht näher bezeichnet',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912388,
          Mk: 3,
          Code: 'S22.2',
          ActineoText: 'Fraktur des Sternums',
          Text: 'Fraktur des Sternums',
          Status: 'assured',
          IsLeading: true,
          __typename: 'ProcessICD',
        },
        {
          _id: 912389,
          Mk: 3,
          Code: 'S22.44',
          ActineoText: 'Rippenserienfraktur (4 oder mehr)',
          Text: 'Rippenserienfraktur: Mit Beteiligung von vier und mehr Rippen',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912390,
          Mk: 2,
          Code: 'S27.31',
          ActineoText: 'Prellung und Hämatom der Lunge',
          Text: 'Prellung und Hämatom der Lunge',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912391,
          Mk: 2,
          Code: 'S39.9',
          ActineoText: 'Verletzung abdominal, lumbosakral und/oder Becken',
          Text: 'Nicht näher bezeichnete Verletzung des Abdomens, der Lumbosakralgegend und des Beckens',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912392,
          Mk: 1,
          Code: 'R58',
          ActineoText: 'Blutung',
          Text: 'Blutung, anderenorts nicht klassifiziert',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912393,
          Mk: 1,
          Code: 'T14.1',
          ActineoText:
            'Offene Wunde an einer nicht näher bezeichneten Körperregion',
          Text: 'Offene Wunde an einer nicht näher bezeichneten Körperregion',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912394,
          Mk: 1,
          Code: 'R23.8',
          ActineoText: 'Sonstige und nicht näher bezeichnete Hautveränderungen',
          Text: 'Sonstige und nicht näher bezeichnete Hautveränderungen',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912395,
          Mk: 3,
          Code: 'S37.00',
          ActineoText: 'Verletzung der Niere, nicht näher bezeichnet',
          Text: 'Verletzung der Niere, nicht näher bezeichnet',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912396,
          Mk: 3,
          Code: 'S62.3',
          ActineoText: 'Fraktur im Bereich der Hand',
          Text: 'Fraktur sonstiger und nicht näher bezeichneter Teile des Handgelenkes und der Hand',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920670,
          Mk: 3,
          Code: 'S37.03',
          ActineoText: 'Komplette Ruptur des Nierenparenchyms',
          Text: 'Komplette Ruptur des Nierenparenchyms',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920671,
          Mk: 2,
          Code: 'S52.51',
          ActineoText: 'Distale Fraktur des Radius: Extensionsfraktur',
          Text: 'Distale Fraktur des Radius: Extensionsfraktur',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920663,
          Mk: 1,
          Code: 'S51.9',
          ActineoText:
            'Offene Wunde des Unterarmes, Teil nicht näher bezeichnet',
          Text: 'Offene Wunde des Unterarmes, Teil nicht näher bezeichnet',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920665,
          Mk: 1,
          Code: 'J90',
          ActineoText: 'Pleuraerguss',
          Text: 'Pleuraerguss, anderenorts nicht klassifiziert',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
      ],
      __typename: 'Person',
    },
    __typename: 'CalculationEntity',
  },
  {
    _id: '61b23b256cc8961a3445dc63',
    BeforeAccJob: '',
    Person: {
      _id: 'T1056702',
      Firstname: 'Olaf',
      Lastname: 'Kirschenbaum',
      Birthday: '1979-12-13T23:00:00.000Z',
      MaritalStatus: 'NotSet',
      Icds: [
        {
          _id: 922613,
          Mk: 3,
          Code: 'S92.0',
          ActineoText: 'Fraktur des Kalkaneus',
          Text: 'Fraktur des Kalkaneus',
          Status: 'unknown',
          IsLeading: true,
          __typename: 'ProcessICD',
        },
        {
          _id: 922614,
          Mk: 2,
          Code: 'S92.3',
          ActineoText: 'Fraktur der Mittelfußknochen',
          Text: 'Fraktur der Mittelfußknochen',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 922616,
          Mk: 3,
          Code: 'S22.2',
          ActineoText: 'Fraktur des Sternums',
          Text: 'Fraktur des Sternums',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
      ],
      __typename: 'Person',
    },
    __typename: 'CalculationEntity',
  },
  {
    _id: '630492a8f71829079d52d22b',
    BeforeAccJob: '',
    Person: {
      _id: 'C34177',
      Firstname: '',
      Lastname: '',
      Birthday: '2022-08-23T06:42:02.316Z',
      MaritalStatus: 'NotSet',
      Icds: [],
      __typename: 'Person',
    },
    __typename: 'CalculationEntity',
  },
  {
    _id: '630492b8f71829079d52d2af',
    BeforeAccJob: '',
    Person: {
      _id: 'C52679',
      Firstname: '',
      Lastname: '',
      Birthday: '2022-08-23T06:42:02.316Z',
      MaritalStatus: 'NotSet',
      Icds: [],
      __typename: 'Person',
    },
    __typename: 'CalculationEntity',
  },
  {
    _id: '61b23b346cc8961a3445dca5',
    BeforeAccJob: '',
    Person: {
      _id: 'T1145350',
      Firstname: 'Udo',
      Lastname: 'Kirschenbaum',
      Birthday: '1950-04-16T22:00:00.000Z',
      MaritalStatus: 'NotSet',
      Icds: [
        {
          _id: 912386,
          Mk: 2,
          Code: 'S92.3',
          ActineoText: 'Fraktur der Mittelfußknochen',
          Text: 'Fraktur der Mittelfußknochen',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912387,
          Mk: 2,
          Code: 'S52.50',
          ActineoText: 'Distale Fraktur des Radius',
          Text: 'Distale Fraktur des Radius: Nicht näher bezeichnet',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912388,
          Mk: 3,
          Code: 'S22.2',
          ActineoText: 'Fraktur des Sternums',
          Text: 'Fraktur des Sternums',
          Status: 'assured',
          IsLeading: true,
          __typename: 'ProcessICD',
        },
        {
          _id: 912389,
          Mk: 3,
          Code: 'S22.44',
          ActineoText: 'Rippenserienfraktur (4 oder mehr)',
          Text: 'Rippenserienfraktur: Mit Beteiligung von vier und mehr Rippen',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912390,
          Mk: 2,
          Code: 'S27.31',
          ActineoText: 'Prellung und Hämatom der Lunge',
          Text: 'Prellung und Hämatom der Lunge',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912391,
          Mk: 2,
          Code: 'S39.9',
          ActineoText: 'Verletzung abdominal, lumbosakral und/oder Becken',
          Text: 'Nicht näher bezeichnete Verletzung des Abdomens, der Lumbosakralgegend und des Beckens',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912392,
          Mk: 1,
          Code: 'R58',
          ActineoText: 'Blutung',
          Text: 'Blutung, anderenorts nicht klassifiziert',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912393,
          Mk: 1,
          Code: 'T14.1',
          ActineoText:
            'Offene Wunde an einer nicht näher bezeichneten Körperregion',
          Text: 'Offene Wunde an einer nicht näher bezeichneten Körperregion',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912394,
          Mk: 1,
          Code: 'R23.8',
          ActineoText: 'Sonstige und nicht näher bezeichnete Hautveränderungen',
          Text: 'Sonstige und nicht näher bezeichnete Hautveränderungen',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912395,
          Mk: 3,
          Code: 'S37.00',
          ActineoText: 'Verletzung der Niere, nicht näher bezeichnet',
          Text: 'Verletzung der Niere, nicht näher bezeichnet',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912396,
          Mk: 3,
          Code: 'S62.3',
          ActineoText: 'Fraktur im Bereich der Hand',
          Text: 'Fraktur sonstiger und nicht näher bezeichneter Teile des Handgelenkes und der Hand',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920670,
          Mk: 3,
          Code: 'S37.03',
          ActineoText: 'Komplette Ruptur des Nierenparenchyms',
          Text: 'Komplette Ruptur des Nierenparenchyms',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920671,
          Mk: 2,
          Code: 'S52.51',
          ActineoText: 'Distale Fraktur des Radius: Extensionsfraktur',
          Text: 'Distale Fraktur des Radius: Extensionsfraktur',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920663,
          Mk: 1,
          Code: 'S51.9',
          ActineoText:
            'Offene Wunde des Unterarmes, Teil nicht näher bezeichnet',
          Text: 'Offene Wunde des Unterarmes, Teil nicht näher bezeichnet',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920665,
          Mk: 1,
          Code: 'J90',
          ActineoText: 'Pleuraerguss',
          Text: 'Pleuraerguss, anderenorts nicht klassifiziert',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
      ],
      __typename: 'Person',
    },
    __typename: 'CalculationEntity',
  },
  {
    _id: '5f69f2c6ef296153814ba870',
    BeforeAccJob: '',
    Person: {
      _id: 'T1145350',
      Firstname: 'Udo',
      Lastname: 'Kirschenbaum',
      Birthday: '1950-04-16T22:00:00.000Z',
      MaritalStatus: 'NotSet',
      Icds: [
        {
          _id: 912386,
          Mk: 2,
          Code: 'S92.3',
          ActineoText: 'Fraktur der Mittelfußknochen',
          Text: 'Fraktur der Mittelfußknochen',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912387,
          Mk: 2,
          Code: 'S52.50',
          ActineoText: 'Distale Fraktur des Radius',
          Text: 'Distale Fraktur des Radius: Nicht näher bezeichnet',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912388,
          Mk: 3,
          Code: 'S22.2',
          ActineoText: 'Fraktur des Sternums',
          Text: 'Fraktur des Sternums',
          Status: 'assured',
          IsLeading: true,
          __typename: 'ProcessICD',
        },
        {
          _id: 912389,
          Mk: 3,
          Code: 'S22.44',
          ActineoText: 'Rippenserienfraktur (4 oder mehr)',
          Text: 'Rippenserienfraktur: Mit Beteiligung von vier und mehr Rippen',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912390,
          Mk: 2,
          Code: 'S27.31',
          ActineoText: 'Prellung und Hämatom der Lunge',
          Text: 'Prellung und Hämatom der Lunge',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912391,
          Mk: 2,
          Code: 'S39.9',
          ActineoText: 'Verletzung abdominal, lumbosakral und/oder Becken',
          Text: 'Nicht näher bezeichnete Verletzung des Abdomens, der Lumbosakralgegend und des Beckens',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912392,
          Mk: 1,
          Code: 'R58',
          ActineoText: 'Blutung',
          Text: 'Blutung, anderenorts nicht klassifiziert',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912393,
          Mk: 1,
          Code: 'T14.1',
          ActineoText:
            'Offene Wunde an einer nicht näher bezeichneten Körperregion',
          Text: 'Offene Wunde an einer nicht näher bezeichneten Körperregion',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912394,
          Mk: 1,
          Code: 'R23.8',
          ActineoText: 'Sonstige und nicht näher bezeichnete Hautveränderungen',
          Text: 'Sonstige und nicht näher bezeichnete Hautveränderungen',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912395,
          Mk: 3,
          Code: 'S37.00',
          ActineoText: 'Verletzung der Niere, nicht näher bezeichnet',
          Text: 'Verletzung der Niere, nicht näher bezeichnet',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912396,
          Mk: 3,
          Code: 'S62.3',
          ActineoText: 'Fraktur im Bereich der Hand',
          Text: 'Fraktur sonstiger und nicht näher bezeichneter Teile des Handgelenkes und der Hand',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920670,
          Mk: 3,
          Code: 'S37.03',
          ActineoText: 'Komplette Ruptur des Nierenparenchyms',
          Text: 'Komplette Ruptur des Nierenparenchyms',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920671,
          Mk: 2,
          Code: 'S52.51',
          ActineoText: 'Distale Fraktur des Radius: Extensionsfraktur',
          Text: 'Distale Fraktur des Radius: Extensionsfraktur',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920663,
          Mk: 1,
          Code: 'S51.9',
          ActineoText:
            'Offene Wunde des Unterarmes, Teil nicht näher bezeichnet',
          Text: 'Offene Wunde des Unterarmes, Teil nicht näher bezeichnet',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920665,
          Mk: 1,
          Code: 'J90',
          ActineoText: 'Pleuraerguss',
          Text: 'Pleuraerguss, anderenorts nicht klassifiziert',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
      ],
      __typename: 'Person',
    },
    __typename: 'CalculationEntity',
  },
  {
    _id: '5f69bf5a933a2414c8f540e7',
    BeforeAccJob: '',
    Person: {
      _id: 'T1145350',
      Firstname: 'Udo',
      Lastname: 'Kirschenbaum',
      Birthday: '1950-04-16T22:00:00.000Z',
      MaritalStatus: 'NotSet',
      Icds: [
        {
          _id: 912386,
          Mk: 2,
          Code: 'S92.3',
          ActineoText: 'Fraktur der Mittelfußknochen',
          Text: 'Fraktur der Mittelfußknochen',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912387,
          Mk: 2,
          Code: 'S52.50',
          ActineoText: 'Distale Fraktur des Radius',
          Text: 'Distale Fraktur des Radius: Nicht näher bezeichnet',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912388,
          Mk: 3,
          Code: 'S22.2',
          ActineoText: 'Fraktur des Sternums',
          Text: 'Fraktur des Sternums',
          Status: 'assured',
          IsLeading: true,
          __typename: 'ProcessICD',
        },
        {
          _id: 912389,
          Mk: 3,
          Code: 'S22.44',
          ActineoText: 'Rippenserienfraktur (4 oder mehr)',
          Text: 'Rippenserienfraktur: Mit Beteiligung von vier und mehr Rippen',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912390,
          Mk: 2,
          Code: 'S27.31',
          ActineoText: 'Prellung und Hämatom der Lunge',
          Text: 'Prellung und Hämatom der Lunge',
          Status: 'assured',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912391,
          Mk: 2,
          Code: 'S39.9',
          ActineoText: 'Verletzung abdominal, lumbosakral und/oder Becken',
          Text: 'Nicht näher bezeichnete Verletzung des Abdomens, der Lumbosakralgegend und des Beckens',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912392,
          Mk: 1,
          Code: 'R58',
          ActineoText: 'Blutung',
          Text: 'Blutung, anderenorts nicht klassifiziert',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912393,
          Mk: 1,
          Code: 'T14.1',
          ActineoText:
            'Offene Wunde an einer nicht näher bezeichneten Körperregion',
          Text: 'Offene Wunde an einer nicht näher bezeichneten Körperregion',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912394,
          Mk: 1,
          Code: 'R23.8',
          ActineoText: 'Sonstige und nicht näher bezeichnete Hautveränderungen',
          Text: 'Sonstige und nicht näher bezeichnete Hautveränderungen',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912395,
          Mk: 3,
          Code: 'S37.00',
          ActineoText: 'Verletzung der Niere, nicht näher bezeichnet',
          Text: 'Verletzung der Niere, nicht näher bezeichnet',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 912396,
          Mk: 3,
          Code: 'S62.3',
          ActineoText: 'Fraktur im Bereich der Hand',
          Text: 'Fraktur sonstiger und nicht näher bezeichneter Teile des Handgelenkes und der Hand',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920670,
          Mk: 3,
          Code: 'S37.03',
          ActineoText: 'Komplette Ruptur des Nierenparenchyms',
          Text: 'Komplette Ruptur des Nierenparenchyms',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920671,
          Mk: 2,
          Code: 'S52.51',
          ActineoText: 'Distale Fraktur des Radius: Extensionsfraktur',
          Text: 'Distale Fraktur des Radius: Extensionsfraktur',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920663,
          Mk: 1,
          Code: 'S51.9',
          ActineoText:
            'Offene Wunde des Unterarmes, Teil nicht näher bezeichnet',
          Text: 'Offene Wunde des Unterarmes, Teil nicht näher bezeichnet',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
        {
          _id: 920665,
          Mk: 1,
          Code: 'J90',
          ActineoText: 'Pleuraerguss',
          Text: 'Pleuraerguss, anderenorts nicht klassifiziert',
          Status: 'unknown',
          IsLeading: false,
          __typename: 'ProcessICD',
        },
      ],
      __typename: 'Person',
    },
    __typename: 'CalculationEntity',
  },
];

const filteredCalc = data.reduce((reducer, calc) => {
  if (reducer.find(reducerItem => reducerItem.Person._id === calc.Person._id)) {
    return reducer;
  }
  // check if Person has any Icds element has IsLeading === true
  const filtered = calc.Person.Icds.filter((icd) => icd.IsLeading === true);
  // use current calc and replace with filtered Icds
  const newData = { ...calc, Person: { ...calc.Person, Icds: filtered } };
  reducer.push(newData);
  // always return the reducer array
  return reducer;
}, []);

console.log(data);
console.log(filteredCalc);

CodePudding user response:

Simplest solution I can think of is instead of using an array and reducing, use a dictionary. This will automatically remove all duplicates (technically overwrite them) and leave you with a single row per customer.

const dict = {};
const filteredCalc = allPersonsDetails.calculations.forEach((calc) => {
    // check if Person has any Icds element has IsLeading === true
    const filtered = calc.Person.Icds.filter((icd) => icd.IsLeading);
    // use current calc and replace with filtered Icds
    const newData = { ...calc, Person: { ...calc.Person, Icds: filtered } };
    // store new data with key to preventduplicates
    dict[`${calc.Person._id}${calc.Person.Firstname}${calc.Person.Lastname}`] =
        newData;
});

// Your values are stored in the Object's values.
Object.values(dict);

  • Related