get JSON Layer data

2023-08-11  本文已影响0人  niccky

1、获取 JSON data 每一层的数据,并计算JSON 的最大层数

function run(obj) {
    let ans = 0;
    let data = [];
    function fn(obj, level = 0) {
        if (typeof obj === 'object') {
            for (let k in obj) {
                if (obj.hasOwnProperty(k) && typeof obj[k] === 'object') {
                    data.push({v: obj[k], h: level, key: k})
                    fn(obj[k], level + 1);
                } else {
                    ans = Math.max(level + 1, ans);
                    data.push({v: obj[k], h: level, key: k})
                }
            }
        }
    }
    fn(obj);

    const map = data.reduce((ret, c, index) => {
        if(ret[c.h] == null) {
            ret[c.h] = [];
        }
        ret[c.h].push({k: c.key, v: c.v});
        return ret;
    }, {});
    return {ans, map};
}

2、测试逻辑
测试获取每一层的数据

const ans = run(tests());

console.log('data is  ', ans);
image.png

3、附录
测试数据

function tests() {
    return {
        a: { b: [1] },
        c: {
            d: {
                e: {
                    f: 2, o: {
                        h: 3, i: [1, 2, 3], j: [
                            4, 5, 6,
                            [
                                {
                                    k: 22,
                                    l: 33,
                                    m: [
                                        {
                                            x: 1,
                                            y: 2,
                                            z: 3
                                        },
                                        {
                                            x: 4,
                                            y: 5,
                                            z: 6
                                        }
                                    ]
                                }
                            ]
                        ]
                    }
                }
            }
        },
    }
}
上一篇 下一篇

猜你喜欢

热点阅读