简单的说下本示例中的树形数据的结构:
"type": "logic",
"content": "and",
"left": {
"type": "leaf",
"content": "=",
"left": "ID",
"right": "123"
},
"right": {
"type": "leaf",
"content": "~",
"left": "Time",
"right": "234~"
}
即每个节点都包含type, content, left,right四个属性,其中type, content包含该结点的数据,left和right包含该借点的左右子树节点。而我们关心的数据始终都包含在叶子节点中。
父节点的type始终为logic,叶节点的type为leaf或者model,其中model始终有一个右子树节点,他的下面不会有其它节点。
这里我们的树结构都是左节点是子树或者叶节点,右节点始终为叶节点,用图来表示就是这样:
如果有4个节点的话,那么上图1 的位置就会变成一个二叉树结构了。
上述就是这个树形结构的说明了。
将它解析为数组格式的话就要运用递归的方法了:
//声明一个变量用来存储结果
var res = [];
function treeToArr(t) {
if (t.type == "logic") {
//是父节点
if (t.right.type == "model") {
res.push({
relation: 'and',
field: t.right.left,
value: t.right.right.content,
operation: t.right.content,
})
} else {
res.push({
relation: 'and',
field: t.right.le