利用reduce方法将字符串“点”链接 转 JSON对象 "a.b.c.d" => {a:{b:{c:d:{}}}} - 戴向天

637 阅读1分钟

大家好!我叫戴向天

QQ群:602504799

如若有不理解的,可加QQ群进行咨询了解

image.png

// 源数据字符串
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);

image.png

封装

    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被改变
    }