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