企业内部真题

打印 上一主题 下一主题

主题 815|帖子 815|积分 2445

1、一个是铺平的数组改成树的结构,递归一下就可以了,第二个是用react写一个短信验证码发送,第三个是链表翻转
  2、写个hoc实现传入一个组件,渲染这个组件,在组件染失败的情况下渲染特定的失败组件并上报失败信息,渲染成功上报渲染成功信息,点击上报点击信息
  3、for循环100个接口,每次只调3个
  4、然后是深拷贝 forwardref用法
  前端面试题:一个是铺平的数组改成树的结构

题目一剖析一

在前端开辟中,将一个铺平的数组转换为树结构是一个常见的需求。通常,铺平的数组中的每个元素会有一个 id 和一个 parentId,通过这两个属性可以确定元素之间的父子关系。下面我们使用递归的方法来实现这个转换。
示例代码
  1. // 定义一个函数,用于将铺平的数组转换为树结构
  2. function arrayToTree(arr, parentId = null) {
  3.    
  4.     // 创建一个空数组,用于存储当前层级的子节点
  5.     const tree = [];
  6.     // 遍历铺平的数组
  7.     for (const item of arr) {
  8.    
  9.         // 检查当前元素的 parentId 是否等于传入的 parentId
  10.         if (item.parentId === parentId) {
  11.    
  12.             // 递归调用 arrayToTree 函数,查找当前元素的子节点
  13.             const children = arrayToTree(arr, item.id);
  14.             // 如果存在子节点,将子节点添加到当前元素的 children 属性中
  15.             if (children.length > 0) {
  16.    
  17.                 item.children = children;
  18.             }
  19.             // 将当前元素添加到当前层级的树结构中
  20.             tree.push(item);
  21.         }
  22.     }
  23.     // 返回当前层级的树结构
  24.     return tree;
  25. }
  26. // 示例铺平数组
  27. const flatArray = [
  28.     {
  29.     id: 1, parentId: null, name: 'Root' },
  30.     {
  31.     id: 2, parentId: 1, name: 'Child 1' },
  32.     {
  33.     id: 3, parentId: 1, name: 'Child 2' },
  34.     {
  35.     id: 4, parentId: 2, name: 'Grandchild 1' },
  36.     {
  37.     id: 5, parentId: 2, name: 'Grandchild 2' }
  38. ];
  39. // 调用 arrayToTree 函数,将铺平数组转换为树结构
  40. const tree = arrayToTree(flatArray);
  41. // 打印转换后的树结构
  42. console.log(tree);
复制代码
代码解释
函数定义:arrayToTree 函数担当两个参数,arr 是铺平的数组,parentId 是当前层级的父节点 id,默以为 null,表示根节点。
遍历数组:使用 for…of 循环遍历铺平的数组,对于每个元素,检查其 parentId 是否等于传入的 parentId。
递归查找子节点:如果当前元素的 parentId 等于传入的 parentId,则递归调用 arrayToTree 函数,查找当前元素的子节点。
添加子节点:如果递归调用返回的子节点数组不为空,则将子节点数组添加到当前元素的 children 属性中。
返回树结构:将符合条件的元素添加到当前层级的树结构中,并返回该树结构。
复杂度分析
时间复杂度:,由于对于每个元素,都需要遍历整个数组来查找其子节点。
空间复杂度:,重要用于存储递归调用栈和最终的树结构。
题目一剖析二

将一个平铺的数组改成树的结构,可以通过递归的方法来实现。以下是一个示例代码,展示了如何将平铺的数组转换为树的结构:
  1. function arrayToTree(arr, pid = '') {
  2.    
  3.   const tree = [];
  4.   const map = {
  5.    };
  6.   // 首先将所有元素存入map中,key为id,value为元素本身
  7.   arr.forEach(item => {
  8.    
  9.     map[item.id] = {
  10.     ...item, children: [] };
  11.   });
  12.   // 然后根据pid来构建树
  13.   arr.forEach(item => {
  14.    
  15.     if (item.pid === pid) {
  16.    
  17.       tree.push(map[item.id]);
  18.     } else if (item.pid in map) {
  19.    
  20.       map[item.pid].children.push(map[item.id]);
  21.     }
  22.   });
  23.   return tree;
  24. }
  25. // 示例用法
  26. const flatArray = [
  27.   {
  28.     id: '1', pid: '', name: 'root' },
  29.   {
  30.     id: '2', pid: '1', name: 'child1' },
  31.   {
  32.     id: '3', pid: '1', name: 'child2' },
  33.   {
  34.     id: '4', pid: '2', name: 'grandchild1' },
  35.   {
  36.     id: '5', pid: '2', name: 'grandchild2' }
  37. ];
  38. const tree = arrayToTree(flatArray);
  39. console.log(JSON.stringify(tree, null, 2));
复制代码
在上述代码中:

  • arrayToTree函数担当两个参数:arr(平铺的数组)和pid(当前处理的父ID,初始为空字符串表示根节点)。
  • 起首创建了一个空数组tree用于存放结果,以及一个空对象map用于快速查找元素。
  • 遍历平铺数组,将全部元素存入map中,同时初始化每个元素的children属性为空数组。
  • 再次遍历平铺数组,如果当前元素的pid等于pid参数(即当前处理的父ID),则将其添加到结果数组tree中;否则,如果当前元素的pid

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表