随笔

指针的一些小用处

扁平数据转树形

借助引用的特性完成关联效果, 最后输出一个数组
不管怎么说 总归比递归的时间复杂度要低吧

有个朋友说, 你在用 map[key] 的时候也相当于一次循环.....
emmmm 没看过源码, 有时间我去看下再更新..

// 将一维的省市区数据转为三维
formatSourceArea = (sourceArea) => {
        let mapSouceArea = {};
        let finalAreaList = [];
        sourceArea.map(area => {
            mapSouceArea[area.id] = area;
        });

        Object.keys(mapSouceArea).map(areaId => {
            if (mapSouceArea[areaId].parent_id) {
                if (mapSouceArea[mapSouceArea[areaId].parent_id]) {
                    if (!mapSouceArea[mapSouceArea[areaId].parent_id].children) {
                        mapSouceArea[mapSouceArea[areaId].parent_id].children = [];
                    }
                    mapSouceArea[mapSouceArea[areaId].parent_id].children.push(mapSouceArea[areaId]);
                }
            } else {
                finalAreaList.push(mapSouceArea[areaId]);
            }
        });
        return finalAreaList;
}

// antd 的 tree 组件会返回所有选中的地区的 ID, 所以又写了一个获取选中最高等级的逻辑, 与本文主题无关
analysisMergerArea = (val) => {
        let finalAreaList = [];
        const { mapSouceArea } = this.state;

        val.map(id => {
            let match = false
            val.map(id2 => {
                if (mapSouceArea[id].parent_id && id2 == mapSouceArea[id].parent_id) {
                    match = true;
                }
            });
            if (!match) {
                finalAreaList.push(id);
            }
        })
        this.setState({
            selectedAreasId: finalAreaList
        })
    }

本文链接:https://note.lilonghe.net/post/some-pointer-tips.html

-- EOF --