跳至主要內容

对象键的展开

Mr.He小于 1 分钟

对象键的展开

记录一道面试题,当时竟然没做出来:

let obj = {
	"A.B.C.D":1,
	"A.B.E.F":2
}
// 写一个方法实现如下结果
let result = {
	A:{
		B:{
			C:{
				D:1
			},
			E:{
				F:2
			}
		}
	}
}

代码:

function parseObject(obj) {
    const result = {};

    for (const key in obj) {
        const keys = key.split('.');
        let target = result; // 这个是重点

        for (let i = 0; i < keys.length; i++) {
            const k = keys[i];
            if (i === keys.length - 1) {
                target[k] = obj[key];
            } else {
                target[k] = target[k] || {};
                target = target[k];// 将新对象赋值给target,让下次直接能访问新对象的属性
            }
        }
    }

    return result;
}

const obj = {
    "A.B.C.D": 1,
    "A.B.E.F": 2
};

const parsedObj = parseObject(obj);
console.log(parsedObj);