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

如何用forEach/map等遍历嵌套对象,将所有节点的active设为false

批量设置嵌套对象所有节点的active属性为false

问题说明

给定一个层级不确定的嵌套对象结构(如下示例),需要遍历根节点及其所有子节点、孙节点,将每个节点的active属性设为false。当节点的children数组为空时,停止遍历该分支。

注:示例代码中属性拼写为ative,建议统一修正为标准的active,避免属性不一致问题。

示例对象结构:

const obj = {
  name: 'obj1',
  active: true,
  children: [
    {
      name: 'obj2',
      active: true,
      children: [
        {
          name: 'Obj23',
          active: true,
          children: []
        }
      ]
    },
    {
      name: 'obj3',
      children: [
        {
          name: 'Obj32',
          active: true,
          children: []
        }
      ]
    }
  ]
};

解决方案

方法1:递归遍历(直观简洁)

结合递归与forEach遍历所有节点,处理当前节点后递归处理子节点:

function deactivateAllNodes(node) {
  // 设置属性为false,兼容原拼写错误的ative
  node.active = false;
  node.ative = false;

  // 存在children数组时,遍历子节点递归处理
  if (node.children && Array.isArray(node.children)) {
    node.children.forEach(child => deactivateAllNodes(child));
  }
}

// 调用函数处理根对象
deactivateAllNodes(obj);

方法2:迭代遍历(避免栈溢出)

对于层级极深的对象,递归可能导致栈溢出,可使用队列实现迭代遍历:

function deactivateAllNodesIterative(root) {
  const queue = [root];

  while (queue.length > 0) {
    const node = queue.shift();
    // 设置属性为false
    node.active = false;
    node.ative = false;

    // 将子节点加入队列等待处理
    if (node.children && Array.isArray(node.children)) {
      queue.push(...node.children);
    }
  }
}

// 调用函数处理根对象
deactivateAllNodesIterative(obj);

说明

  • 两种方法均支持任意层级的嵌套对象,当节点的children为空数组时,对应分支的遍历会自动停止
  • 代码中保留了对ative属性的处理,用于兼容原示例中的拼写错误,若已统一修正为active,可删除该行

内容的提问来源于stack exchange,提问作者Nilton Schumacher F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:48:29