你瞅啥呢

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 从第二层循环开始就要暂存上一层的数据!!

 

posted @   叶乘风  阅读(213)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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
点击右上角即可分享
微信分享提示