系统存储目录路径的格式化(JS)

一道题

输入数据:

var pathList = [
  '/a/b',
  '/a/2/c',
  '/d',
];

 

格式化数据(输出):

{
  "a": {
    "2": {
      "c": {}
    },
    "b": {}
  },
  "d": {}
}

 

格式化函数的实现示例:

/**
 * 格式化路径的函数
 * @param {string[]} pathList - 路径列表
 * @return {Object} 
 */
function pathFormat(pathList) {
  // 格式化数据
  const answer = {};
  /**
   * 递归处理格式化过程
   * @param {string[]} list - 目录字符串列表
   * @param {Object} level - 路径信息对象
   * @return {undefined}
   */
  const rec = (list, level) => {
    // 终止条件
    if (list.length === 0) return;
    // 当前目录的名称(从最外层开始依次处理)
    const key = list.shift();
    // 如果当前目录的下级信息对象还不存在,则进行初始化
    if (level[key] === undefined) {
      level[key] = {};
    }
    // 处理下一级
    rec(list, level[key]);
  };

  // 迭代处理路径列表中的每一项
  for (const path of pathList) {
    // 目录字符串片段
    const frags = path.split('/').filter(Boolean);
    rec(frags, answer);
  }

  return answer;
}

console.log(JSON.stringify(pathFormat(pathList), null, 2));

 

 

End

posted @ 2022-05-24 15:17  樊顺  阅读(99)  评论(0编辑  收藏  举报