字符串模板与对象转换

新手上路,请多包涵

字符串

| 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'
      }
    }
阅读 1.5k
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));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题