1.遍历原来的树结构,获取其中的属性值,返回新的树结构
/**
* 递归遍历树结构
*
* @param item -
* @param index -
* @returns {*}
*/
mapTree(item, index) {
if (!item.node) {
return {
id: index,
children: [],
};
}
const haveChildren = Array.isArray(item.children) && item.children.length > 0;
return {
id: item.node.id,
text: item.node.label,
// 判断它是否存在子集,若果存在就进行再次进行遍历操作,直到不存在子集便对其他的元素进行操作
children: haveChildren ? item.children.map(i => this.mapTree(i, index)) : [],
};
}
treeModel.map((item, index) => {
return this.mapTree(item, index);
});
2.遍历树结构,获取某个属性值
/**
* 获取 tree 中所有的id
*
* @param arr 树结构数据
* @returns {Array} 返回id数组
*/
getIds = arr => {
const result = [];
const queue = [...arr];
while (queue.length) {
const item = queue.shift();
if (item.data) {
result.push(item.data.id);
}
queue.push(...(item.children || []));
}
return result;
};
3.遍历tree结果数据,获取所有的节点
private static List<PropertyNode> getNodes(List<PropertyTreeModel> treeModel) {
List<PropertyNode> result = new ArrayList<>();
ArrayDeque<PropertyTreeModel> queue = new ArrayDeque<>(treeModel);
while (queue.size() > 0) {
PropertyTreeModel item = queue.poll();
if (item.getNode() != null) {
result.add(item.getNode());
}
List<PropertyTreeModel> children = item.getChildren();
if (children != null && !children.isEmpty()) {
for (int i = children.size() - 1; i >= 0; i--) {
queue.push(children.get(i));
}
}
}
return result;
}