将testList转成levelList
const levelList = [
{
value: '10000',
label: '商品营销',
disabled: false,
children: [
{
value: '1',
label: 'S',
disabled: false,
children: [],
},
{
value: '2',
label: 'A',
disabled: false,
children: [],
},
{
value: '3',
label: 'B',
disabled: false,
children: [],
},
{
value: '4',
label: 'C',
disabled: false,
children: [],
},
],
},
{
value: '20000',
label: '用户营销',
disabled: false,
children: [
{
value: '20100',
label: 'cross',
disabled: false,
children: [
{
value: '20101',
label: 'cross',
disabled: false,
children: [],
},
{
value: '20102',
label: 'cross',
disabled: false,
children: [],
},
],
},
],
},
];
const testList = [
{
calendarLabelKey: 10000,
bizLabelName: '商品营销',
bizLabelKey: '商品营销',
valid: true,
child: [
{
calendarLabelKey: 1,
bizLabelName: 'S',
bizLabelKey: 'S',
valid: false,
child: [],
},
{
calendarLabelKey: 2,
bizLabelName: 'A',
bizLabelKey: 'A',
valid: true,
child: [],
},
{
calendarLabelKey: 3,
bizLabelName: 'B',
bizLabelKey: 'B',
valid: true,
child: [],
},
{
calendarLabelKey: 4,
bizLabelName: 'C',
bizLabelKey: 'C',
valid: true,
child: [],
},
],
},
{
calendarLabelKey: 20000,
bizLabelName: '用户营销',
bizLabelKey: '用户营销',
valid: true,
child: [
{
calendarLabelKey: 20100,
bizLabelName: 'Cross券',
bizLabelKey: 'cross',
valid: true,
child: [
{
calendarLabelKey: 20101,
bizLabelName: '新客券',
bizLabelKey: 'cross',
valid: true,
child: [],
},
{
calendarLabelKey: 20102,
bizLabelName: '老客券',
bizLabelKey: 'cross',
valid: true,
child: [],
},
],
},
],
},
];
function convertList(list) {
return list.map(item => {
const { calendarLabelKey, bizLabelName, child , valid} = item;
return {
value: String(calendarLabelKey),
label: bizLabelName,
disabled: !valid,
children: child.length > 0 ? convertList(child) : [],
};
});
}
const aaa = convertList(testList); // 将testList转成levelList
console.log(aaa);
反查
const levelList = [
{
value: '10000',
label: '商品营销',
disabled: false,
children: [
{
value: '1',
label: 'S',
disabled: false,
children: [],
},
{
value: '2',
label: 'A',
disabled: false,
children: [],
},
{
value: '3',
label: 'B',
disabled: false,
children: [],
},
{
value: '4',
label: 'C',
disabled: false,
children: [],
},
],
},
{
value: '20000',
label: '用户营销',
disabled: false,
children: [
{
value: '20100',
label: 'cross',
disabled: false,
children: [
{
value: '20101',
label: 'cross',
disabled: false,
children: [],
},
{
value: '20102',
label: 'cross',
disabled: false,
children: [],
},
],
},
],
},
];
const level1Id = 20101
const level2Id = 2
// 递归方案
function findPath1(tree, value, path = []) {
for (let node of tree) {
console.log(node, 'node');
if (node.value === value) {
path.push(node.value);
return path;
}
if (node.children) {
const nextPath = [...path, node.value];
const result = findPath1(node.children, value, nextPath); // 递归
if (result.length) return result;
}
}
return [];
}
// 回溯方案
function findPath2(tree, value) {
let result = []; // 路径集合,不能放在全局,防止内存泄漏
const traverse = (value, path, tree) => {
if (tree.length === 0) return;
for (let node of tree) {
path.push(node.value);
console.log(path, 'path');
if (node.value === value) {
result = JSON.parse(JSON.stringify(path)); // 一定是深拷贝,否则如果是复杂数据类型会出错
return;
}
const children = Array.isArray(node.children) ? node.children : [];
console.log(children, 'children----');
traverse(value, path, children);
path.pop(); // 回溯
}
};
traverse(value, [], tree);
return result;
}
console.log(findPath1(levelList, "20101"));
console.log(findPath2(levelList, "2"));
// js根据level1Id数组levelList中查找,输出 ['20000','20100','20101']
// js根据level2Id数组levelList中查找,输出 ['10000','2']