深层对象转深层数组(重点:先把对象转数组,直接for in 遍历对象不太可行)

var json: {
            PRow0: { 
                style: { 
                    width: 10 
                } 
            },
            PTable1: { 
                style: { 
                    height: 20 
                } 
            }
        }

const jsonToArrTree = (json) => {
    let data = Object.keys(json).map( (item) =>  {
        let ops = {
            title:item,
            key:nanoid(),
            children:[]
        }
        let child = json[item]
        if(typeof child == "object"  && Object.keys(child).length > 0){
            ops.children = jsonToArrTree(child)
        }
        return ops
    })
    return data
}

转换结果 [ { "title": "PRow0", "key": "LzgVGHyEkwyUAUVOSOt_u", "children": [ { "title": "style", "key": "0KNgtu0C4Cg_8QalqAcTm", "children": [ { "title": "width", "key": "jN4HAiWnfFXNz4csrtEQz", "children": [] } ] } ] }, { "title": "PTable1", "key": "Y4i4tq8C12rXbH_GBtAXl", "children": [ { "title": "style", "key": "2bD_q7ZfEu3yZILLsUfSn", "children": [ { "title": "height", "key": "OOg79AeMP-BQoDmF7wzlX", "children": [] } ] } ] } ]

  

每个字段都是上一级父级字段的拼接

let pre = '' const jsonToArrTree = (json) => { let data = Object.keys(json).map( (item) => { pre += (pre ? '.':'') + item let ops = { title:pre, key:nanoid(), children:[] } let child = json[item] console.log(pre) if(typeof child == "object" && Object.keys(child).length > 0){ ops.children = jsonToArrTree(child) } return ops }) pre = '' return data }

 

posted @ 2019-10-31 18:18  winyh  阅读(666)  评论(2编辑  收藏  举报