js 递归实现,平级结构聚合成树形结构(一维数组转树形多维数组)
function formatData() {
var data = {
col: 3,
dataList: [
{ 1: '总公司', level: 1, orgCode: null, id: 'ta1237Wh' },
{ 1: '分公司', level: 1, orgCode: '10000001', id: '678AEEta7Wh' },
{ 1: '分公司', 2: '电信运营商', level: 2, orgCode: '10000001', id: 'Gyqta7Wh4v' },
{ 1: '总公司', 2: '消费洞察', level: 2, orgCode: '10000002', id: '7t4YNW38' },
{ 1: '总公司', 2: '消费洞察', 3: '电信', level: 3, orgCode: '100010', id: 'ycHWilk' },
{ 1: '总公司', 2: '银行金融', level: 2, orgCode: '10000003', id: 'WjbNYp1G' },
],
conditionPage: { pageNo: 1, total: 10, pageSize: 10, pageTotal: 1 }
};
var treeData = [];
var i = 0;
data.dataList.forEach((element) => {
if (element.level === 1) {
treeData[i] = element
i++
}
});
treeData.forEach((temp) => {
this.getTreeData(data.dataList, 1, temp)
})
console.log('treeData===〉', treeData);
};
function getTreeData(list, level, data) {
var i = 0
var childData = []
var level2 = level + 1
list.forEach((element) => {
if (element.level === level2 && data[level] === element[level]) {
childData[i] = element;
i++
this.getTreeData(list, level2, element)
}
})
data.child = childData;
}
formatData()
- 输出的tree形数据架构
2. 使用for循环, 一维数组转三维数组
var { dataList } = data;
var result = [];
dataList.forEach((item, index) => {
var { level, id, orgCode } = item;
var obj = {
name: "",
level: level,
id: id,
orgCode,
children: [],
}
if (!result[item['1']]) {
obj['name'] = item['1'];
result[item['1']] = obj;
} else if(result[item['1']] && typeof(item['3'])=="undefined") {
obj['name'] = item['2'];
result[item['1']].children.push(obj);
} else {
var {children} = result[item['1']];
children.forEach(jtem => {
if(jtem.name == item['2']) {
obj['name'] = item['3'];
var _obj = delete obj.children;
jtem.children.push(obj);
}
});
}
})
var data = Object.values(result);
console.log(data);
- 输出结果