如何将嵌套对象转为对象数组?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);
关键修改说明:
- 直接用
Object.values(obj).map,无需额外的transformedData变量,简化代码 - 处理
children时先判断当前项是否有items属性:- 有则用
Object.values(item.items)将items对象转为数组,再map生成子项结构 - 没有则直接设为
[]
- 有则用
- 新增
parseInt(item.key)将字符串key转为数字,匹配你给出的预期格式(不需要可删除) - map回调直接返回新对象,避免了之前错误的赋值逻辑
执行这段代码后,就能得到你预期的数组结构,children字段会正确生成子数组或空数组。
内容的提问来源于stack exchange,提问作者someone
相关产品推荐
相关产品推荐

