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

React/Next.js中为带children的嵌套JSON对象添加选中状态

解决Next.js树形视图节点标记选中状态的方案

步骤1:预处理选中ID集合

先把选中分类的ID提取到Set中,让节点选中状态的判断效率提升至O(1):

const selectedIds = new Set(referenceSelectedCategories.map(item => item.categoryId));

步骤2:递归遍历树形结构添加checked属性

编写递归函数,遍历每个节点并复制原属性,同时添加checked字段,再递归处理子节点:

function addCheckedStatus(node) {
  // 复制原节点,避免修改原始数据
  const processedNode = { ...node };
  // 根据ID是否在选中集合中设置checked值
  processedNode.checked = selectedIds.has(processedNode.id) ? "true" : "false";
  // 递归处理子节点
  if (processedNode.children?.length) {
    processedNode.children = processedNode.children.map(child => addCheckedStatus(child));
  }
  return processedNode;
}

步骤3:生成目标JSON对象

调用函数处理从数据库获取的原始JSON:

const desiredOutputJsonObject = addCheckedStatus(jsonObject);

补充说明

  • 该方法通过对象展开创建新节点,不会修改原始JSON数据,避免副作用
  • 递归逻辑适配任意深度的树形结构,即使超过5级也能正常工作
  • 使用Set存储选中ID,在选中分类数量较多时,能大幅提升判断效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:45:14