Home > Blockchain >  Typescript get all values of a property from a nested object
Typescript get all values of a property from a nested object

Time:04-19

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))

  • Related