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

如何为存在多父级子节点的嵌套JSON对象添加正确depth值?

问题修复:为嵌套数组所有对象正确添加depth属性

你的代码问题出在assignDepth递归函数里的return语句——当处理某个节点的子节点时,return会直接终止当前层级的后续同级节点遍历,导致只有第一个同级节点能被正确赋值depth,其余节点被跳过。

修复后的代码

var data = [
  { "title": "meta", "parentids": [] },
  { "title": "instagram", "parentids": ["meta"] },
  { "title": "facebook", "parentids": ["meta"] },
  { "title": "whatsapp", "parentids": ["meta"] },
  { "title": "zuckerberg", "parentids": ["instagram", "facebook"] },
]

// Assign a 'children' property to each object.
data.forEach(o => o.children = [])

// For each object assign a key/object pair
let map = data.reduce((a, o) => (a[o.title] = o, a), {})

// For each 'parentids' in each object in data push this object
data.forEach(o => o.parentids.forEach(pid => map[pid] && map[pid].children.push(o)))

let copyOfData = [...data];

let assignDepth = (arr, depth = 0, index = 0) => {
   if(index < arr.length){
      arr[index].depth = depth;
      // 去掉return,先处理子节点,不终止当前遍历
      if(arr[index].children.length){
         assignDepth(arr[index].children, depth+1, 0);
      };
      // 继续处理当前数组的下一个节点
      assignDepth(arr, depth, index+1);
   };
};

if (copyOfData.length) {
    assignDepth(copyOfData)
    console.log(copyOfData)
}

修复逻辑说明

  • 移除处理子节点时的return,确保处理完当前节点的子节点后,会继续执行后续代码,遍历当前数组的下一个同级节点。
  • 递归不再被提前终止,所有节点(包括同级节点、深层子节点)都会被依次赋值正确的depth值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:24:52