function transform(list) { const ret = {}; for (let i = 0; i < list.length; ++i) { const { level } = item = {...list[i] }; const preLevel = Math.max(level - 1, 0); if (!ret[preLevel]) { ret[preLevel] = [item]; if (ret[level]) { item.children = ret[level]; continue; } } else { ret[preLevel].push(item); } ret[level] = item.children = []; } return ret[0]; } console.log(transform(outlist));