JSFiddle - React, Tailwind, and code Playground

by Tenderfeel

JavaScript

const origHeaders = [{
    "level": 2,
    "content": "ギャラリー",
    "text": "ギャラリー",
    "link": "ギャラリー",
    "isSpoiler": false,
    child: []
  },
  {
    "level": 2,
    "content": "ねたばれの見出し",
    "text": "ねたばれの見出し",
    "link": "ねたばれの見出し",
    "isSpoiler": true
  },
  {
    "level": 2,
    "content": "HHML要素",
    "text": "HHML要素",
    "link": "hhml要素",
    "isSpoiler": false,
    child: []
  },
  {
    "level": 3,
    "content": "見出しレベル3",
    "text": "見出しレベル3",
    "link": "見出しレベル3",
    "isSpoiler": false,
    child: []
  },
  {
    "level": 2,
    "content": "性格",
    "text": "性格",
    "link": "性格",
    "isSpoiler": false,
    child: []
  },
  {
    "level": 2,
    "content": "見出し",
    "text": "見出し",
    "link": "見出し",
    "isSpoiler": false,
    child: []
  }
];

const topLv = 2
const visibleLv = 3
const arrays = []

origHeaders
  .filter(header => header.level <= visibleLv)
  .forEach(header => {
    let parent
    if (header.level !== topLv) {
      parent = arrays[arrays.length - 1]
      parent.child.push(header)
    } else {
      arrays.push(header)
    }
  })

console.log(arrays)