2023-10-24 react+ts 遍历双重对象嵌套数组
今天晚上发现ts中无法用forEach遍历对象嵌套数组的数据,比如typeof arr 为 object,就只能用for in 或者Object.entries 再或者Object.keys。
我这里用的是for in:
useEffect(() => { if (value) { const arr: any = []; for (const key in value) { const obj: any = { key: value[key].id, title: value[key].name, children: [], }; const childrenObj = value[key].children for (const key2 in childrenObj) { const obj2: any = { key: childrenObj[key2].id, title: childrenObj[key2].name, children: [], }; obj.children.push(obj2); } arr.push(obj); } console.log("arr ==>", arr); setTreeData(arr); } }, [value]);
注意🔺: 不要写成这样👇
useEffect(() => { if (value) { const arr: any = []; for (const key in value) { const obj: any = { key: value[key].id, title: value[key].name, children: [], }; for (const key2 in value[key].children) { const obj2: any = { key: value[key2].id, title: value[key2].name, children: [], }; obj.children.push(obj2); } arr.push(obj); } console.log("arr ==>", arr); setTreeData(arr); } }, [value]);
上面的第二重循环中没有把children拿出来,而是直接用第一层来遍历数据 for( const key2 in value[key].children ),这将导致无法拿到全部第二层(children)的数据!
value的数据结构:
const value = [ { title: 'title1', key: 1, childern: [ { title: 'title11', key: 11, childern: [] } ] }, { title: 'title2', key: 2, } ]
for in 从第二层循环开始就要暂存上一层的数据!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2022-10-24 2022-10-24 URIError: Failed to decode param '/%3C%=%20BASE_URL%20%3Estatic/index.%3C%=%20VUE_APP_INDEX_CSS_HASH%20%3E.css'
2022-10-24 2022-10-24 记录uniapp根据条件编译从而使部分代码在不同的条件下生效
2022-10-24 2022-10-24 TypeError: getFieldDecorator is not a function