本周工作项目中应用到的基本算法总结;组树结构并且排序、将树拆分并给排序字段、同类型合并
1、组树结构并且排序数据
const view = [
{
"id": 222,
"pid": 0,
"component": "reimburseer",
"order": 1
},
{
"id": 1133,
"pid": 1122,
"component": "summary",
"order": 4
},
{
"id": 1122,
"pid": 0,
"component": "travel_type",
"order": 3
},
{
"id": 1144,
"pid": 1122,
"component": "travel_list",
"order": 3
},
{
"id": 1155,
"pid": 1122,
"component": "custom_attach",
"order": 2
},
{
"id": 111,
"pid": 0,
"component": "commiter",
"order": 3
},
{
"id": 444,
"pid": 0,
"component": "department",
"order": 2
}
]
算法
function processingTemplate(view) {
const treeView = []
// 初始化匹配map
const vMap = view.reduce((m, item) => {
item.children = []
m[item.id] = item
return m
}, {})
for (let i = 0; i a.order - b.order)
} else {
treeView.push(view[i])
}
}
return treeView.sort((a, b) => a.order - b.order)
}
const resultTreeView = processingTemplate(view)
console.log(resultTreeView)
结果
数据
const viewTreeData = [
{
"id": 222,
"pid": 0,
"component": "reimburseer"
},
{
"id": 444,
"pid": 0,
"component": "department"
},
{
"id": 1122,
"pid": 0,
"component": "travel_type",
"children": [
{
"id": 1155,
"pid": 1122,
"component": "custom_attach"
},
{
"id": 1144,
"pid": 1122,
"component": "travel_list"
},
{
"id": 1133,
"pid": 1122,
"component": "summary"
}
]
},
{
"id": 111,
"pid": 0,
"component": "commiter"
}
]
算法
function saveTemplate(treeView) {
const view = []
function extractData(arr, pid) {
let order = 1
for (let i = 0; i {
if (!m[i.field]) {
m[i.field] = [i]
} else {
m[i.field].push(i)
}
return m
}, {})
}
const resultOptionMap = combinationField(options)
console.log(resultOptionMap)
结果