省市区三级联动后端返回用户选择字符串,前端遍历查找,本来想用递归。后来看了一篇文章,作者使用js写的。目前,我在写flutter项目所以该用dart。文章地址,作者讲解的很详细,不再赘述。
/*
* 深度遍历树查找
* @param {Array} tree
* @return {Array}
*/
codeToText(tree, target) {
// 模拟栈,管理结点
List<CityData> stack = [];
stack.addAll(tree);
// 根节点入栈
while (stack.isNotEmpty) {
// 栈顶节点出栈
CityData node = stack.removeLast();
if (node.districtChildren != null) {
// 将候选顶点入栈,进行下一次循环
stack.addAll(node.districtChildren!.reversed);
}
// 查找到目标,退出
if (node.districtCode == target) {
return node.regionName;
}
}
}
调用
List<String> placeList = value.split(',');
place = codeToText(cityList, placeList[0]);
深度遍历返回List(这个是想法开了点小岔,想树形改成list在查找,后来嫌麻烦,没写下去)
/**
* 深度遍历树
* @param {Array} tree
* @return {Array}
*/
codeToText(tree) {
List<CityData> arr = [];
List<CityData> stack = tree;
while (stack.isNotEmpty) {
CityData node = stack.removeLast();
arr.add(node);
if (node.districtChildren != null) {
stack.addAll(node.districtChildren!.reversed);
}
}
return arr;
}