javascript 字符串转对象问题

例如有一个数组, 数组长度不定

const list = 
['a', a.a1', 'a.a2', 'a.a1.a11', 'a.a3', 
'b', 'b.b1.b12', 'c', 'c.c1', 'c.c11.c12.c123', 'c.c2', 
'd']

需要转为

const newObj = {
a: {
    a1: {
        a11: true
    },
    a2: true,
    a3: true
},
b: {
    b1: {
        b12: true
    }
},
c: {
    c1: {
        c11: {
            c12: {
                c123: true
            }
        },
    },
    c2: true
},
d: true

}

请教各位大佬, Javascript 如何实现, 感谢

阅读 1.2k
1 个回答
function setValue(o, k, v){
    let keyArr = k.split('.');
    let tempObj = o, i = 0
    for (let len = keyArr.length; i < len - 1; ++i) {
        let key = keyArr[i];
        if (typeof tempObj[key] !== 'object') {
            tempObj[key] = {}
        };
        tempObj = tempObj[key]
    }

    tempObj[keyArr[i]] = v
    return o
}
list.reduce((o, k) => setValue(o, k, true), {})

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题