共计 676 个字符,预计需要花费 2 分钟才能阅读完成。
编写函数实现如下功能:
输入:
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;
}