此题为昨日字节一面时,面试官给的编程题,由于平时算法题练的少,导致当时没有写出来。今天复盘面试的时候按昨天的思路进行了实现,但觉不够简洁,希望能和大家交流交流。
let str = {
a_b_c:1,
a_b_d:2,
a_c_b:3,
a_c_e:4,
}
/*
输出
{
a:{
b:{
c:1
d:2
}
c:{
b:3
e:4
}
}
}
*/
let keys = Object.keys(str)
let result = keys.reduce((pre,cur,arr) => {
//分割后的key
let sKeys = cur.split('_')
//获取最终的属性名
let valueF = ''
//记录一下最开始的pre
let preN = pre
sKeys.forEach((item,index,arr) => {
preN[item] = preN[item]||{}
if(index===0) valueF = valueF+item
else{valueF = valueF+'_'+item}
if(index === arr.length-1){preN[item]=str[valueF];return}
preN = preN[item]
})
return pre
},{})
console.log(result)
第二版改动之后更简洁了