Model:
export interface FeedNode {
name: string;
children?: FeedNode[];
}
Data:
const dataArray: FeedNode[] = [
{
name: 'FEEDS',
children: [
{ name: 'Pink Vila' },
{ name: 'Dainik bhaskar' },
{ name: 'TOI' },
],
},
{
name: 'BOARDS',
children: [
{
name: 'Top Stories',
children: [{ name: 'Sports' }, { name: 'Politics' }],
},
{
name: 'Interests',
children: [{ name: 'Health' }, { name: 'Entertainment' }],
},
],
}]
My requirement is to get all the names as an array of string based on the parent name e.g.
if dataArray.name == 'FEEDS'. expected result = ['Pink Vila','Dainik bhaskar', 'TOI'].
Similarily
if dataArray.name == 'BOARDS' expected result = ['Top Stories', Sports', 'Politics', 'Interests', 'Health','Entertainment']
I tried dataArray.filter((feedData) => feedData.name === 'FEEDS').map((childData) => childData.children).map((data) => data.name);
However, this failing with error 'Property 'name' does not exist on the type 'FeedNode[]' and the result is undefined.
dataArray.filter(feed => feed.name === 'FEEDS').reduce((agg, feed) => [...agg, ...feed.children.map(child => child.name)], [])You'll have to call thereducerecursively if you have multiple levels ofchildren