今天和朋友聊天,聊到了面试,就和我分享一个没做出来的算法面试题,如下所示:
var a = [
'/a/2/c',
'/a/b',
'/d/2',
]
// 生成
{
a:{
2:{
c:{}
},
b:{},
d:{
2:{}
}
}
仔细看过之后,这道题其实就是考验引用类型的特性,指针的问题,和生成链表道理是一样的,解法如下:
function result(arr) {
let obj = {}
let currentObj = obj
for(let i = 0,len=arr.length;i<len;i++){
let item = arr[i].split("/").slice(1)
for(let j=0,lens=item.length;j<lens;j++){
let key = item[j]
if(!currentObj[key]){
currentObj[key] = {}
}
currentObj = currentObj[key]
}
currentObj = obj
}
return obj
}
自我感觉不是最优解,欢迎大家~