# 写一个函数,将entry转化为指定json
输入是:
const entry = {
'a.b.c.dd': 'abcdd',
'a.d.xx': 'adxx',
'a.e': 'ae'
}
输出是:
const output = {
a: {
b: {
c: {
dd: 'abcdd'
}
},
d: {
xx: 'adxx'
},
e: 'ae'
}
}
函数实现:
const entry = {
'a.b.c.dd': 'abcdd',
'a.d.xx': 'adxx',
'a.e': 'ae'
}
function map(entry) {
const obj = Object.create(null);
for (const key in entry) {
const keyArr = key.split('.');
set(obj, keyArr, entry[key])
}
return obj;
}
function set(obj, keyArr, val) {
let tmp;
// 如果对象没有a.b.c中的a属性,则创建该属性
if (!obj[keyArr[0]]) obj[keyArr[0]] = Object.create(null);
tmp = obj[keyArr[0]];
for (let i = 1; i < keyArr.length; i++) {
if (!tmp[keyArr[i]]){
tmp[keyArr[i]] = keyArr.length - 1 === i ? val : Object.create(null);
}else{
tmp = tmp[keyArr[i]];
}
}
}
console.log(map(entry));
// {
// a: {
// b: {
// c: {
// dd: 'abcdd'
// }
// },
// d: {
// xx: 'adxx'
// },
// e: 'ae'
// }
// }