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; }