记一道面试题,似乎叫索引重构

此题为昨日字节一面时,面试官给的编程题,由于平时算法题练的少,导致当时没有写出来。今天复盘面试的时候按昨天的思路进行了实现,但觉不够简洁,希望能和大家交流交流。
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)

第二版改动之后更简洁了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值