JSFiddle - React, Tailwind, and code Playground
JavaScript
const start = [
{ isYesPath: undefined, name: 'Step 1', parentIds: [0], stepId: 1 },
{ isYesPath: undefined, name: 'Step 2', parentIds: [1], stepId: 2 },
{ isYesPath: true, name: 'Step 3', parentIds: [2], stepId: 3 },
{ isYesPath: false, name: 'Step 4', parentIds: [2], stepId: 4 },
{ isYesPath: undefined, name: 'Step 5', parentIds: [3, 4], stepId: 5 },
]
const result = []
const levels = {}
const modify = (data, pid = 0, level = 0) => data
.filter(({ parentIds, stepId }) => {
if (levels[level] && levels[level].includes(stepId)) return false;
return parentIds.includes(pid)
})
.forEach(e => {
if (!levels[level]) levels[level] = [];
levels[level].push(e.stepId);
if (!result[level]) result[level] = [e]
else result[level].push(e);
modify(data, e.stepId, level + 1)
})
modify(start)
console.log(result);