You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从嵌套结构JSON中提取React菜单与子菜单所需的两组数据

你可以直接遍历接口返回的原始数组,同步提取生成两个目标结构,实现代码如下:

基础处理逻辑

// originData 为你从接口拿到的JSON原始数据
const Array1 = []
const Array2 = {}

originData.forEach(menuItem => {
  // 提取一级菜单名存入Array1
  const menuName = menuItem.content
  Array1.push(menuName)
  // 提取对应子菜单列表存入Array2的对应属性
  Array2[menuName] = menuItem.Subtypes.map(subItem => subItem.content)
})

执行完成后得到的Array1和Array2就是你需要的格式。

React 场景使用示例

如果是在React组件中使用,你可以把处理逻辑放在接口请求的回调中,示例如下:

import { useState, useEffect } from 'react'

const MenuComponent = () => {
  // 对应你要的Array1:一级菜单列表
  const [firstLevelMenus, setFirstLevelMenus] = useState([])
  // 对应你要的Array2:一级菜单名和子菜单的映射对象
  const [subMenuMapping, setSubMenuMapping] = useState({})

  useEffect(() => {
    // 替换为你实际的接口请求逻辑
    fetch('/api/menu/list')
      .then(response => response.json())
      .then(originData => {
        const tempArr1 = []
        const tempArr2 = {}
        originData.forEach(item => {
          tempArr1.push(item.content)
          tempArr2[item.content] = item.Subtypes.map(sub => sub.content)
        })
        setFirstLevelMenus(tempArr1)
        setSubMenuMapping(tempArr2)
      })
  }, [])

  // 后续菜单渲染可直接使用上面两个状态变量
  return (
    <div className="menu-container">
      {/* 渲染示例 */}
      {firstLevelMenus.map(menuName => (
        <div key={menuName} className="first-level-menu">
          {menuName}
          <div className="sub-menu">
            {subMenuMapping[menuName].map(subName => (
              <div key={subName} className="sub-item">{subName}</div>
            ))}
          </div>
        </div>
      ))}
    </div>
  )
}

export default MenuComponent

内容的提问来源于stack exchange,提问作者user9325447

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:54:00