反向递归,树组件常用逻辑
Posted yw00yw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反向递归,树组件常用逻辑相关的知识,希望对你有一定的参考价值。
示例图
树节点方法
/**
* 递归组装数据
* options 数结构
* code 最后一级的 id
* parentHalfKeys 半选的父节点节点
*/
recursion(options, code, parentHalfKeys)
let result = [], // 递归结果
tempArry = []; // 缓存数据
// arry 数据源 code 最后一级数据
const arryMap = (arry, code) =>
arry.map((item, index) =>
if (item.children)
tempArry.push(name: item.name, code: item.id, number: item.spu_count);
arryMap(item.children, code);
else if (item.id == code)
tempArry.push(name: item.name, code: item.id, number: item.spu_count);
result = [...tempArry];
if (index == arry.length - 1)
tempArry.pop();
);
arryMap(options, code);
// 如果当前的子节点中的父节点在半选的节点数组中有,则取子节点的数据,否则取父节点的数据
if (parentHalfKeys.find(item => item === result[0].code))
return label: result[result.length - 1].name, number: result[result.length - 1].number, code: result[result.length - 1].code
else
return label: result[0].name, number: result[0].number, code: result[0].code
,
调用
// 确定
handleConfirm()
let selectedList = this.$refs.treeNode.getCheckedKeys(true); // 选中的最后一级子节点
let parentHalfKeys = this.$refs.treeNode.getHalfCheckedKeys(); // 获取半选的节点
let resultList = []; // 最终的结果数据,需要过滤
selectedList.forEach(item =>
let result = this.recursion(this.classification_list, item, parentHalfKeys);
if (JSON.stringify(resultList).indexOf(result.code) === -1)
resultList.push(result);
);
console.log(resultList);
结果
以上是关于反向递归,树组件常用逻辑的主要内容,如果未能解决你的问题,请参考以下文章