原数据这样的数据结构
想要根据 mergeLayerParam 合并相同项
当存在 active 字段时候,active 那一项作为父级;否则第一个 mergeLayerParam 作为第一项
同一级可能存在多个不同的 mergeLayerParam,合并的数据放入父级的 mergeLayers 字段
// 原
[
{
"title": "1",
"children": [
{
"title": "1-1",
"children": [
{
"title": "1-1-1",
"children": [
{
"title": "1-1-1-1",
"mergeLayerParam": "bbb"
},
{
"title": "1-1-1-2",
"mergeLayerParam": "bbb"
}
]
},
{
"title": "1-1-2",
"children": [
{
"title": "1-1-2-1"
}
]
},
{
"title": "1-1-3",
"children": [
{
"title": "1-1-3-1"
},
{
"title": "1-1-3-2"
},
{
"title": "1-1-3-3"
},
{
"title": "1-1-3-4"
}
]
},
{
"title": "1-1-4",
"mergeLayerParam": "aaa"
},
{
"title": "1-1-5",
"mergeLayerParam": "aaa",
"active": true
},
{
"title": "1-1-6",
"mergeLayerParam": "aaa",
},
{
"title": "1-1-7",
"mergeLayerParam": "你好"
},
{
"title": "1-1-8",
"mergeLayerParam": "你好"
},
{
"title": "1-1-9",
"mergeLayerParam": "你好",
}
]
},
{
"title": "1-2"
},
{
"title": "1-3"
}
]
},
{
"title": "2"
}
]
// 转换成
[
{
"title": "1",
"children": [
{
"title": "1-1",
"children": [
{
"title": "1-1-1",
"children": [
{
"title": "1-1-1-1",
"mergeLayerParam": "bbb",
"mergeLayers": [
{
"title": "1-1-1-1",
"mergeLayerParam": "bbb",
},
{
"title": "1-1-1-2",
"mergeLayerParam": "bbb"
}
]
}
]
},
{
"title": "1-1-2",
"children": [
{
"title": "1-1-2-1"
}
]
},
{
"title": "1-1-3",
"children": [
{
"title": "1-1-3-1"
},
{
"title": "1-1-3-2"
},
{
"title": "1-1-3-3"
},
{
"title": "1-1-3-4"
}
]
},
{
"title": "1-1-5",
"mergeLayerParam": "aaa",
"active": true,
"mergeLayers": [
{
"title": "1-1-4",
"mergeLayerParam": "aaa"
},
{
"title": "1-1-5",
"mergeLayerParam": "aaa",
"active": true,
},
{
"title": "1-1-6",
"mergeLayerParam": "aaa",
},
]
},
{
"title": "1-1-7",
"mergeLayerParam": "你好",
"mergeLayers": [
{
"title": "1-1-7",
"mergeLayerParam": "你好"
},
{
"title": "1-1-8",
"mergeLayerParam": "你好"
},
{
"title": "1-1-9",
"mergeLayerParam": "你好",
}
]
}
]
},
{
"title": "1-2"
},
{
"title": "1-3"
}
]
},
{
"title": "2"
}
]
思路就是遍历,对有 mergeLayerParam 进行分组处理。分组是使用映射表来临时保存的。默认使用第一个节点的副本来作为合并节点,如果遇到 active 的,就用 active 的那个节点属性替换它的属性。