编写函数实现如下功能:

输入:

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

输出:

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

实现:

function convertArrToObj(arr) {
  // 将pathList解析为二维数组
  const arrTemp = arr.map(item => item.split('/').filter(item => item !== ''));
  // 最终输出的结果
  const result = {};

  // 遍历,将内部的每一个数组转为对应的对象格式
  arrTemp.forEach(innerArr => {
    arrToObj(result, innerArr);
  });

  function arrToObj(obj, innerArr) {
    let i = 0;
    if (innerArr[i] && !obj[innerArr[i]] && i < innerArr.length) {
      obj[innerArr[i]] = {};
      // 递归
      arrToObj(obj[innerArr[i]], innerArr.slice(i + 1));
      i++;
    } else if (innerArr[i] && obj[innerArr[i]]) {
      // 如果某个重复的数组元素已经被转为对象的元素,则直接进行下一项的转化
      // '/a/b', '/a/2/c', 第一项的a已经转化为对象元素后,第二项的a不用转化,其后边的/2/c直接追加在a后边
      arrToObj(obj[innerArr[i]], innerArr.slice(i + 1));
      i++;
    }
  }

  return result;
}

C7V1
1 声望1 粉丝