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

如何在JavaScript中遍历含嵌套子对象的数组并打印?

JavaScript遍历多层嵌套对象数组的实现方法

对于这种包含多层子对象的数组,普通for循环只能处理表层和直接子对象,要遍历所有层级(包括孙对象及更深),可以用递归或者**迭代(栈/队列)**的方式实现,下面分别给出具体代码:

方法一:递归遍历

递归是最直观的方式,遍历每个对象时先处理当前对象,再递归处理它的children数组(如果存在):

const data = [
  {
    "id": "1",
    "name": "sara",
    "children": [
      {
        "id": "2",
        "name": "dian"
      },
      {
        "id": "3",
        "name": "michael",
        "children": [
          {
            "id": "4",
            "name": "dkny"
          },
          {
            "id": "5",
            "name": "Anne"
          }
        ]
      }
    ]
  },
  {
    "id": "6",
    "name": "Tommy"
  },
  {
    "id": "7",
    "name": "danken",
    "children": [
      {
        "id": "8",
        "name": "biria"
      }
    ]
  }
];

function traverseItems(items) {
  items.forEach(item => {
    // 打印当前对象信息,可根据需求调整输出格式
    console.log(`id: ${item.id}, name: ${item.name}`);
    // 存在子数组则递归遍历
    if (item.children && Array.isArray(item.children)) {
      traverseItems(item.children);
    }
  });
}

// 启动遍历
traverseItems(data);

这段代码会按层级顺序打印所有对象,从表层到最深层的后代对象都不会遗漏。

方法二:迭代遍历(栈/队列实现)

如果数组层级极深,递归可能触发栈溢出,这时可以用迭代方式,借助栈或队列处理所有层级:

基于栈的实现(后进先出)

function traverseItemsIteratively(items) {
  const stack = [...items];
  
  while (stack.length > 0) {
    const item = stack.pop();
    console.log(`id: ${item.id}, name: ${item.name}`);
    // 将子对象压入栈,继续处理
    if (item.children && Array.isArray(item.children)) {
      stack.push(...item.children);
    }
  }
}

traverseItemsIteratively(data);

基于队列的实现(先进先出,保持原层级顺序)

如果需要和递归完全一致的遍历顺序(从左到右),可以用队列替代栈:

function traverseItemsQueue(items) {
  const queue = [...items];
  
  while (queue.length > 0) {
    const item = queue.shift();
    console.log(`id: ${item.id}, name: ${item.name}`);
    if (item.children && Array.isArray(item.children)) {
      queue.push(...item.children);
    }
  }
}

traverseItemsQueue(data);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:55:21