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

求助:至少6层嵌套(含数组)的对象键值对递归遍历解决方案

深度嵌套对象(含数组)的键值对遍历解决方案

我看了你写的递归函数,问题出在你并没有真正实现递归——你只是手动做了两层遍历,而且没考虑数组的特殊情况(毕竟typeof []也会返回"object")。咱们来改一下,让它能处理任意层级的嵌套对象和数组:

首先明确几个核心要点:

  • 要区分普通对象和数组(数组也是对象,但遍历逻辑不一样)
  • 递归的核心是遇到嵌套结构时再次调用自身,而不是手动写多层循环
  • 要排除null(因为typeof null === "object",但它不是我们要遍历的有效结构)

下面是修正后的递归函数:

function keyValuePairFunc(item, parentKey = "") {
  // 处理数组:遍历每个元素,用索引拼接键路径
  if (Array.isArray(item)) {
    item.forEach((element, index) => {
      const currentKey = parentKey ? `${parentKey}[${index}]` : `[${index}]`;
      keyValuePairFunc(element, currentKey);
    });
    return;
  }

  // 处理普通对象(排除null)
  if (typeof item === "object" && item !== null) {
    Object.entries(item).forEach(([key, value]) => {
      const currentKey = parentKey ? `${parentKey}.${key}` : key;
      keyValuePairFunc(value, currentKey);
    });
    return;
  }

  // 基础情况:非对象/数组,直接打印完整键路径和对应值
  console.log(`${parentKey}: ${item}`);
}

// 调用示例
keyValuePairFunc(loadedData);

这个函数的优势:

  • 自动处理任意层级的嵌套(不管是6层还是更深)
  • 区分对象和数组,数组会用[索引]的形式展示键路径,比如users[0].profile.name,清晰体现值在嵌套结构中的位置
  • 用parentKey参数拼接完整键路径,避免你搞不清当前值属于哪个层级
  • 排除了null的干扰,避免不必要的错误遍历

为什么你的原函数失效?

你的原函数只手动遍历了两层结构,遇到更深的嵌套就停止了;而且当value是数组时,你用Object.entries遍历会拿到索引和元素,但没有继续递归,所以数组里的嵌套结构不会被展开。

举个测试小例子:

const testData = {
  level1: "foo",
  level2: {
    level3: "bar",
    level4: [
      { level5: "baz", level6: { level7: "qux" } },
      "hello"
    ]
  }
};

keyValuePairFunc(testData);

输出结果会是:

level1: foo
level2.level3: bar
level2.level4[0].level5: baz
level2.level4[0].level6.level7: qux
level2.level4[1]: hello

直接把这个函数用到你的loadedData上就能正常遍历所有层级的键值对了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:17:41