I have a nested object:
{
id: 240,
name: 'FY1 2022',
children: [
{
id: 241,
name: 'Q1 2022',
children: [
{
id: 242,
name: 'Jan 2022',
},
{
id: 243,
name: 'Feb 2022',
},
{
id: 244,
name: 'Mar 2022',
},
],
},
],
};
and I need to get all the id values into an array from that objects that does not have the property children
.
Is there a way to do this?
Thanks in advance!
CodePudding user response:
You can try this:
type MyObject = {
id: number,
name: string,
children?: MyObject[]
}
function getIds(obj: MyObject): number[] {
if (!obj.children) {
return [obj.id];
}
return obj.children.reduce((ids:number[],o: MyObject)=> {
ids.push(...getIds(o))
return ids
},[]);
}
CodePudding user response:
try this (using recursion)
const test = {
id: 240,
name: 'FY1 2022',
children: [
{
id: 241,
name: 'Q1 2022',
children: [
{
id: 242,
name: 'Jan 2022',
},
{
id: 243,
name: 'Feb 2022',
},
{
id: 244,
name: 'Mar 2022',
},
],
},
],
};
function addToArray(array, obj) {
if (Object.keys(obj).includes('children')) {
obj.children.forEach(child => addToArray(array, child))
} else {
array.push(obj.id)
}
return array
}
const array = []
console.log(addToArray(array, test))