编写函数实现如下功能:
输入:
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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。