原数据结构:
list: [
{
columns: [
{
key: '4',
name: '结束时间',
field: 'end_time'
},
{
list: [
{
key: '6',
name: '创建人',
field: 'create_user'
}
],
key: '5'
}
],
key: '1'
},
{
key: '2',
name: '项目名称',
field: 'project_name'
},
{
list: [
{
key: '3',
name: '创建时间',
field: 'create_time'
}
]
}
]
需要将其中任何层级中的 name,field单独全部取出来
转换后:
[
{
name:'结束时间',
field:'end_time'
},
{
name:'创建人',
field:'create_user'
}
.......
]
以往这种我都会使用递归来完成,但是递归是重复调用函数自身,而调用函数对于时间和空间的消耗是比较大的,每次调用函数,都要在内存栈中分配空间来保存参数、返回地址以及变量,调用过多的话甚至会导致栈溢出
所以这次就利用压栈算法完成
思路:
首先创建一个栈节构(容器),遇到满足条件的数据,则压入栈,再从头部依次出栈,等栈中数据清空时,也代表着数据已梳理完毕
findModel (param) {
// 创建栈容器
const stack = [...param]
// 最终处理过数据的集合
const newArray = []
while (stack.length) {
// 出栈
const item = stack.shift()
if (item.columns || item.list) {
const itemList = item.columns || item.list
// 压栈
stack.push(...itemList)
} else {
newArray.push(
{
field: item.model,
label: item.name,
condition: ''
}
)
}
}
return newArray
},
这只是一个比较简单的数据结构转换的算法