Wie wird das verschachtelte Array reduziert?

Oct 28 2020

Wie reduziere ich das verschachtelte Array im Array?

Hier ist das Beispiel für ein Eingabearray:

const input = [
{
   id: 1,
   name: 'Charles',
   otherFields: [{
       id: 2,
       name: 'Pung',
   }, {
       id: 3,
       name: 'James',
   }]
}, {
   id: 4,
   name: 'Charles',
   otherFields: [{
       id: 5,
       name: 'Pung',
   }, {
       id: 6,
       name: 'James',
   }]
}

]

Ausgabearray, das ich erhalten möchte.

[{
   id: 1,
   name: 'Charles'
}, {
   id: 2,
   name: 'Pung',
}, {
   id: 3,
   name: 'James',
}, {
   id: 4,
   name: 'Charles'
}, {
   id: 5,
   name: 'Pung',
}, {
   id: 6,
   name: 'James',
}]

Ich möchte irgendwie die Ausgabe in einer Aussage wie bekommen

input.map((sth) => ({...sth??, sth.field...})); // I'm not sure :(

Antworten

4 CertainPerformance Oct 28 2020 at 00:22

Mit flatMapkönnen Sie die otherFieldsEigenschaft entfernen und ein Array zurückgeben, das das übergeordnete Element und das andere Array enthält:

const input = [{
  id: 1,
  name: 'Charles',
  otherFields: [{
    id: 2,
    name: 'Pung',
  }, {
    id: 3,
    name: 'James',
  }]
}];
console.log(
  input.flatMap(({ otherFields, ...item }) => [item, ...otherFields])
);

1 NinaScholz Oct 28 2020 at 00:39

Für mehr als eine Ebene können Sie einen rekursiven Ansatz zum Reduzieren verwenden.

const
    flat = ({ otherFields = [], ...o }) => [o, ...otherFields.flatMap(flat)],
    input = [{ id: 1, name: 'Charles', otherFields: [{ id: 2, name: 'Pung' }, { id: 3, name: 'James', otherFields: [{ id: 4, name: 'Jane' }] }] }],
    result = input.flatMap(flat);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }