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,原因有两个:
- 没有处理
null或undefined的情况,当递归到非预期的空值时,调用Object.keys()就会触发报错; - 逻辑方向不符合需求:你的代码试图返回一个处理后的对象,但实际需要统计嵌套层数生成数组,且遇到数组时,递归处理索引键没有意义,反而会干扰结果。
内容的提问来源于stack exchange,提问作者someone
相关产品推荐
相关产品推荐

