大家好!我叫戴向天
QQ群:602504799
如若有不理解的,可加QQ群进行咨询了解
// 源数据字符串
const str = 'a.b.c.d';
// 分割并倒序
const arr = str.split('.').reverse();
// 创建一个新的对象用来接受
const data = {};
// 给予默认值
data[arr[0]] = 1;
// 获取结果值
const res = arr.reduce((obj,key,index)=>{
// 省去第一个key值
if(!index){
return obj
};
// 获取上一个key值名称
const lastKey = arr[index-1];
// 将当前的key值进行初始化出来一个对象
obj[key] = {};
// 给当前的对象进行新增一个上一个key名,并将上一个的数据信息进行赋值上当前的对象中
obj[key][lastKey] = obj[lastKey];
// 删除上一个数据信息
delete obj[lastKey]
// 返回结果
return obj;
},{...data}); // 这里使用es6的扩展运算符,是为了防止源数据data被改变
// 输出结果
console.log(res);
封装
function strToObject(str, defaultValue = null){
// 分割并倒序
const arr = str.split('.').reverse();
// 创建一个新的对象用来接受
const data = {};
// 给予默认值
data[arr[0]] = defaultValue;
// 获取结果值
return arr.reduce((obj,key,index)=>{
// 省去第一个key值
if(!index){
return obj
};
// 获取上一个key值名称
const lastKey = arr[index-1];
// 将当前的key值进行初始化出来一个对象
obj[key] = {};
// 给当前的对象进行新增一个上一个key名,并将上一个的数据信息进行赋值上当前的对象中
obj[key][lastKey] = obj[lastKey];
// 删除上一个数据信息
delete obj[lastKey]
// 返回结果
return obj;
},{...data}); // 这里使用es6的扩展运算符,是为了防止源数据data被改变
}