记录(思考其他思路,感觉编程模式也有问题)

242 阅读1分钟
let source = {"a.b.c": "1", "a.d": "2", "e": "3"}

  let flat = function(source){
    let obj = {};
    for(let item in source){
      if(item.length>1){
        let arr = item.split("."),
            cArr = Array.from(arr);

        // 第一种思路
        recAddObj(cArr,obj,source[item]);

        // 第二种思路
        // const itemObj = recAddObj(cArr,obj);

        // itemObj[arr[arr.length-1]] = source[item];
      }else{
        obj[item] = source[item];
      }
    }
    return obj;
  }


function recAddObj(arr,obj,val){
   return arr.reduce((prev,item,index,array)=>{
     if(prev[item]){
       return prev[item];
     }
    var recObj = {};
    if(index==arr.length-1){
      recObj = val;
    }
    prev[item] = recObj;
    return recObj;
   },obj);
}
// function recAddObj(arr,obj,fObj){
//     if(arr.length<= 0){
//       return fObj;
//     }
//     var key = arr.shift();
//     if(obj[key]){
//       return recAddObj(arr,obj[key],obj)
//     }
//     var recObj = {};
//     obj[key] = recObj;
//     return recAddObj(arr,recObj,obj);
//   }

// 在此处添加代码实现flat函数逻辑
var target = flat(source);
    console.log(target);