# 写一个函数,将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'
//   }
// }