JS中,拿到一个地区集合,转成省市区三级树结构方法

可以用 reduce 方法来构建省市区三级树结构,代码如下:

function buildRegionTree(data) {
    const tree = [];

    // 省份映射
    const provinceMap = new Map();

    data.forEach(({ p_id, c_id, a_id }) => {
        // 处理省份
        if (!provinceMap.has(p_id)) {
            provinceMap.set(p_id, {
                id: p_id,
                children: new Map()
            });
        }

        const province = provinceMap.get(p_id);

        // 处理城市
        if (!province.children.has(c_id)) {
            province.children.set(c_id, {
                id: c_id,
                children: []
            });
        }

        const city = province.children.get(c_id);

        // 处理区县
        city.children.push({ id: a_id });
    });

    // 转换 Map 为数组
    provinceMap.forEach((province) => {
        const cities = [];
        province.children.forEach((city) => {
            cities.push({
                id: city.id,
                children: city.children
            });
        });

        tree.push({
            id: province.id,
            children: cities
        });
    });

    return tree;
}

const extend_arealimitconfigs = [
    { p_id: 4, c_id: 59, a_id: 579 },
    { p_id: 4, c_id: 58, a_id: 566 },
    { p_id: 4, c_id: 59, a_id: 583 },
    { p_id: 4, c_id: 53, a_id: 524 }
];

console.log(JSON.stringify(buildRegionTree(extend_arealimitconfigs), null, 2));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值