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

如何将嵌套对象转为对象数组?children返回undefined求助

问题解决:children字段返回undefined的修复

首先看你代码里的核心错误:

  • 调用Object.values的方式完全错误,应该遍历当前项的items属性,而非x?.Object?.values(items)
  • 处理children的map回调逻辑错误,你试图给数组直接添加属性,正确做法是在map里返回每个子项的新对象
  • 未处理当前项没有items的情况,此时children应设为空数组

修正后的代码如下:

const obj = {
 numbers: {
  label: "main numbers",
  pageTitle: "Numbers",
  key: "1",
    items: {
      firstNumber: {
        label: "first number",
        pageTitle: "first",
        key: "first"
       },
     secondNumber: {
        label: "second number",
        pageTitle: "second",
        key: "second"
       }  
    }
 },
letters: {
  label: "main Letters",
  pageTitle: "Letters",
  key: "2",
     items: {
       firstLetter: {
        label: "first Letter",
        pageTitle: "first",
        key: "first"
     }
   }
 },
signs: {
   label: "main sign",
   pageTitle: "Sign",
   key: "3"
}
};

// 修正后的转换代码
const data = Object.values(obj).map(item => {
  return {
    label: item.label,
    pageTitle: item.pageTitle,
    key: parseInt(item.key), // 如需将key转为数字(匹配你预期的格式),保留该行;不需要则删除parseInt
    children: item.items ? Object.values(item.items).map(child => {
      return {
        label: child.label,
        pageTitle: child.pageTitle,
        key: child.key
      };
    }) : []
  };
});

console.log(data);

关键修改说明:

  1. 直接用Object.values(obj).map,无需额外的transformedData变量,简化代码
  2. 处理children时先判断当前项是否有items属性:
    • 有则用Object.values(item.items)将items对象转为数组,再map生成子项结构
    • 没有则直接设为[]
  3. 新增parseInt(item.key)将字符串key转为数字,匹配你给出的预期格式(不需要可删除)
  4. map回调直接返回新对象,避免了之前错误的赋值逻辑

执行这段代码后,就能得到你预期的数组结构,children字段会正确生成子数组或空数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:31:07