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

递归实现嵌套对象结构转换未返回正确结果问题排查

对象结构转换问题排查与解决方案

原有代码的核心问题

  • 递归调用函数名错误:recursiveAssign方法内调用的this.test未定义,要么是笔误写错了递归函数名,要么是遗漏了对应方法实现,直接导致递归逻辑异常。
  • 依赖对象键的索引顺序取值:通过totalKeys[1]获取下级数组的逻辑完全不可靠,JS对象键的顺序在不同场景下可能有差异,且不同层级的下级数组键名不同(categories/subCategories/subSubCategories),不能用固定索引取值。
  • 递归过程错误修改上层对象引用:递归函数中反复传入上层的json对象并执行_.assign,会导致对象循环引用、层级混乱,出现自身拷贝的问题。
  • 边界分支逻辑错误:当对象只有label一个键时,执行_.assign(json, obj['label'])是把字符串赋值给对象,属于语法逻辑错误。
  • 递归返回值逻辑混乱:没有明确每一层递归应该返回当前层级转换后的独立对象,而是和上层对象耦合。

正确实现方案

思路:每一层递归只处理当前层级的数组,为每个元素生成label: 子层级对象的键值对,子层级对象由对应下级数组递归生成,不需要依赖上层对象引用,也不需要关注下级数组的具体键名。

// 递归转换单层级数组
transformLevel(arr) {
  return _.reduce(arr, (result, item) => {
    // 取当前item的label作为键
    const key = item.label;
    // 查找当前item中值为数组的下级属性
    const childArr = _.find(_.values(item), _.isArray);
    // 下级数组为空则值为{},否则递归处理下级数组
    result[key] = childArr?.length ? this.transformLevel(childArr) : {};
    return result;
  }, {});
}

// 入口方法
transform(typeObj) {
  return this.transformLevel(typeObj);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:36:04