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

ReactJS扁平化嵌套对象键求助:处理多层DefaultValue报错问题

解决嵌套DefaultValue对象转指定数组的问题

针对你需要把多层嵌套的DefaultValue对象转换成包含6个"DefaultValue"元素的数组的需求,直接统计嵌套的DefaultValue层数,再生成对应数组即可,以下是可行方案:

方案一:循环遍历统计层数

这种方式直观且避免递归可能的栈溢出问题(当前场景层数少影响不大,但通用场景更稳妥):

function countNestedLayers(obj) {
  let layerCount = 0;
  let current = obj;
  // 循环检查当前是否为有效对象且包含DefaultValue属性
  while (typeof current === 'object' && current !== null && 'DefaultValue' in current) {
    layerCount++;
    current = current.DefaultValue;
  }
  return layerCount;
}

// 调用示例
const data = [
  {
    id: 243,
    Name: "test",
    type: "checkbox",
    DefaultValue: {
      DefaultValue: {
        DefaultValue: {
          DefaultValue: {
            DefaultValue: {
              DefaultValue: ["a"]
            }
          }
        }
      }
    }
  }
];

const layerNum = countNestedLayers(data[0].DefaultValue);
const targetArray = Array(layerNum).fill("DefaultValue");
console.log(targetArray); // 输出目标数组

方案二:递归统计层数

如果偏好递归写法,也可以这样实现:

function countLayersRecursive(obj) {
  // 终止条件:当前不是有效对象,或没有DefaultValue属性
  if (typeof obj !== 'object' || obj === null || !('DefaultValue' in obj)) {
    return 0;
  }
  return 1 + countLayersRecursive(obj.DefaultValue);
}

const layerNum = countLayersRecursive(data[0].DefaultValue);
const targetArray = Array(layerNum).fill("DefaultValue");

你的原有代码问题分析

你写的递归函数报错Cannot convert undefined or null to object,原因有两个:

  1. 没有处理null或undefined的情况,当递归到非预期的空值时,调用Object.keys()就会触发报错;
  2. 逻辑方向不符合需求:你的代码试图返回一个处理后的对象,但实际需要统计嵌套层数生成数组,且遇到数组时,递归处理索引键没有意义,反而会干扰结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:20:32