省市区树结构扁平化转换
如何将带有省级、市级、区级信息的树形结构,转换为扁平化的代码数组?
解决方案:
采用递归的方法,将选中的状态传递下去:
使用示例:
结果:
/**
* 获取所有被选中的code
* @param {any[]} list 树形结构
* @param {string[]} parentList 到父级所有的code的数组
* @param {boolean} parentChecked 上级是否被选中,若上级被选中,则下面所有的子选项均是被选中的数据
*/
const getCheckedList = (list, parentList = [], parentChecked = false) => {
let result = [];
if (!Array.isArray(list)) {
return result;
}
list.forEach((item) => {
const checked = parentChecked || item.check; // 父级被选中或当前被选中,均认为是被选中
const codeList = parentList.concat(item.code);
if (item.children) {
// 当前不是最内层
result = result.concat(getCheckedList(item.children, codeList, checked));
} else {
// 已到最内层
if (checked) {
result.push(codeList);
}
}
});
return result;
};console.log(getCheckedList(tree));[
[110000, 110100, 110101],
[110000, 110100, 110102],
[130000, 130100, 130102],
[130000, 130100, 130104],
[150000, 150100, 150103]
]