goinghugh
V2EX  ›  算法

求助一个算法题,将 a.b.c=10 的格式转换为 map 结构

  •  
  •   goinghugh · Mar 23, 2020 · 2319 views
    This topic created in 2242 days ago, the information mentioned may be changed or developed.

    将 a.b.c 的格式转换为 map 结构.

    输入:

    a.b.c=10
    a.b.d=20
    a.e.f.z=30
    

    输出:

    {
        "a": {
            "b": {
                "c": 10,
                "d": 20
            },
            "e": {
                "f": {
                    "z": 30
                }
            }
        }
    }
    

    工作中遇到的一个问题,上述是屏蔽掉业务后的问题。 有没有比较好的实现方式?不用详细代码,能给出个相关的算法关键字或者思路就行,谢谢各位!

    7 replies    2020-03-23 21:07:18 +08:00
    qq316107934
        1
    qq316107934  
       Mar 23, 2020
    不说下语言? JS 可以直接实现吧
    goinghugh
        2
    goinghugh  
    OP
       Mar 23, 2020
    @qq316107934 JS 如何实现?我比较熟的是 Java
    fishCatcher
        3
    fishCatcher  
       Mar 23, 2020 via iPhone
    trie 树?每一层是一个大括号
    fishCatcher
        4
    fishCatcher  
       Mar 23, 2020 via iPhone
    @fishCatcher 准确的来说不用 trie 树吧,普通的树就可以
    jmc891205
        5
    jmc891205  
       Mar 23, 2020
    反射 + 递归?
    goinghugh
        6
    goinghugh  
    OP
       Mar 23, 2020
    @fishCatcher 额,普通的树可以。。感谢,绕到二维数组之类的了。。
    qq316107934
        7
    qq316107934  
       Mar 23, 2020
    ```javascript
    function getJSONFromExp(exp){
    let m = {}
    let t = m
    s = exp.split(".")
    s.slice(0,-1).reduce((tmp,item) => {
    if (!t[item]){
    t[item] = {}
    }
    t = t[item]
    },t)
    last = s.pop().split("=")
    t[last[0]] = last[1]
    return m
    }

    console.log(getJSONFromExp("a.e.f.z=30"))
    ```
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5523 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 03:45 · PVG 11:45 · LAX 20:45 · JFK 23:45
    ♥ Do have faith in what you're doing.