猿问

字符串模板与对象转换

字符串


| Str | String | 字符串 | mock1 |

| `message` | Object | 消息 | mock2 |

| `message.data` | Object | 消息2 | mock3 |

| `message.data.data2` | Object | 消息3 | mock4 |

我希望得到的格式.多少层级不确定。求解决方法或思路。


{

      Str: {

        mock: 'mock1',

        must: 1,

        remark: '字符串',

        type: 'String'

      },

      message: {

        data: {

          data2: {

            mock: 'mock4',

            must: 1,

            remark: '消息3',

            type: 'Object'

          },

          mock: 'mock3',

          must: 1,

          remark: '消息2',

          type: 'Object'

        },

        mock: 'mock2',

        must: 1,

        remark: '消息',

        type: 'Object'

      }

    }


开心每一天1111
浏览 432回答 1
1回答

缥缈止盈

不是太清楚题主的需求,也没考虑其他情况,大概写了一下,仅供参考。假设把你的字符串作为一个数组输入,每一行字符串就是数组的一个元素function parse(obj, str){    let [key, type, remark, mock] = str.split('|').filter(i => i);    key = key.trim().replace(/`/g,'');    type = type.trim();    remark = remark.trim();    mock = mock.trim();    const keyArr = key.split('.');    generateObj(obj, keyArr, {        type,        remark,        mock    });}function generateObj(obj, keyArr, info){    let tmpObj = obj;    const len = keyArr.length;    keyArr.forEach((key, idx) => {        tmpObj[key] = tmpObj[key] || {};        if(idx === len - 1){            tmpObj[key] = {                ...tmpObj[key],                ...info,                must: 1            }        }        tmpObj = tmpObj[key];    });}// 主函数function process(strArr) {    if (!strArr) return;    const res = {};    strArr.forEach(item => {        parse(res, item);    });    return res;}const input = ['| Str | String | 字符串 | mock1 |', '| `message` | Object | 消息 | mock2 |', '| `message.data` | Object | 消息2 | mock3 |', '| `message.data.data2` | Object | 消息3 | mock4 |'];console.log(process(input));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答