-4

input data

const inputData = [
  {
    id: 1,
    name: "Fruit",
  },
  {
    id: 2,
    name: "Apple",
    parent: 1,
  },
  {
    id: 3,
    name: "Orange",
    parent: 1,
  },
  {
    id: 4,
    name: "Banana",
    parent: 1,
  },
  {
    id: 5,
    name: "Berry",
    parent: 1,
  },
  {
    id: 6,
    name: "Drink",
  },
  {
    id: 7,
    name: "Water",
    parent: 6,
  },
  {
    id: 8,
    name: "Lemonade",
    parent: 6,
  },
  {
    id: 9,
    name: "Tea",
    parent: 6,
  },
  {
    id: 10,
    name: "Soup",
  },
];

**Expected output: **

const outputData = [
  {
    id: 1,
    name: "Fruit",
    children: [
      {
        id: 2,
        name: "Apple",
        parent: 1,
      },
      {
        id: 3,
        name: "Orange",
        parent: 1,
      },
      {
        id: 4,
        name: "Banana",
        parent: 1,
      },
      {
        id: 5,
        name: "Berry",
        parent: 1,
      },
    ],
  },
  {
    id: 6,
    name: "Drink",
    children: [
      {
        id: 7,
        name: "Water",
        parent: 6,
      },
      {
        id: 8,
        name: "Lemonade",
        parent: 6,
      },
      {
        id: 9,
        name: "Tea",
        parent: 6,
      },
    ],
  },
  {
    id: 10,
    name: "Soup",
    children: [],
  },
]
adiga
  • 34,372
  • 9
  • 61
  • 83
Ikram Akbar
  • 120
  • 3
  • 13

1 Answers1

1

Try filter and map

const inputData = [
  {
    id: 1,
    name: "Fruit",
  },
  {
    id: 2,
    name: "Apple",
    parent: 1,
  },
  {
    id: 3,
    name: "Orange",
    parent: 1,
  },
  {
    id: 4,
    name: "Banana",
    parent: 1,
  },
  {
    id: 5,
    name: "Berry",
    parent: 1,
  },
  {
    id: 6,
    name: "Drink",
  },
  {
    id: 7,
    name: "Water",
    parent: 6,
  },
  {
    id: 8,
    name: "Lemonade",
    parent: 6,
  },
  {
    id: 9,
    name: "Tea",
    parent: 6,
  },
  {
    id: 10,
    name: "Soup",
  },
];

var newData=inputData.filter(i=> !i.parent).map(i=>{
let children=inputData.filter(c=> c.parent == i.id);
return {...i,children}
});

console.log(newData)
jitender
  • 10,238
  • 1
  • 18
  • 44