记录自己的面试题

133 阅读1分钟

面试题1

答案都是自己想的,可能不对

/ 输入
const flatTreeData = [
  { id: '1', parentId: '0' },

  { id: '1-1', parentId: '1' },

  { id: '1-1-1', parentId: '1-1' },

  { id: '1-2', parentId: '1' },

  { id: '1-3', parentId: '1' },

  { id: '2', parentId: '0' },

  { id: '2-1', parentId: '2' },

  { id: '2-2', parentId: '2' },

  { id: '2-3', parentId: '2' },
];
/ 输出
const buildTree = {
  id: '0',

  children: [
    {
      id: '1',

      children: [{ id: '1-1', children: [{ id: '1-1-1' }] }, { id: '1-2' }, { id: '1-3' }],
    },

    {
      id: '2',

      children: [{ id: '2-1' }, { id: '2-2' }, { id: '2-3' }],
    },
  ],
};
  function arrayToTree(array) {
    const map = new Map();
    let tree = {
        id: '0',
        children: []
    };
    array.forEach(item => {
      map.set(item.id,{...item, children: []})
    });
  
    array.forEach(item => {
      if (item.parentId !== '0') {
        const parentNode =  map.get(item.parentId)
        parentNode.children.push(map.get(item.id))
        map.set(item.parentId,parentNode)
      } else {
        tree.children.push(map.get(item.id)) 
      }
    });
    

    return tree;
  }

代码思路

  1. 首先利用map,把数组的id和需要的数据结构结合起来,{id: 0 , children: []}
  2. 遍历数组,如果有parentId,通过map,可以把当前的值,存入父节点的children,如果没有parentId,直接存入根节点。遍历完就得到了最后的数据