有两个文件,文件1的数据是标签类目数据,有四列,cateId 是类目 id,cateName 是类目名字,catePId 是类目的父类目(一级类目为Null),isLeaf 是否是叶子类目,列分隔符是逗号;
文件2的数据是标签数据,有三列,tagId 是 标签 id,tagName 是标签名字,cateId 是标签所属的叶子类目,列分隔符是逗号
读取这两个文件,然后输出标签类目树结构
如下所示:
// [
// {
// id: '', // 类目 ID
// name: '', // 类目名
// list: [
// {
// id: '', // 类目 ID
// name: '', // 类目名
// list: [
// {
// tagId: '', // 标签 ID, 最后一层是标签数据
// tagName: '' // 标签名
// }
// ]
// }
// ]
// } // 一个一级类目
...
// ]
let wenjian1 = [
{
cateId: '1-1-1',
cageName: '余杭区',
catePId: '1-1',
isLeaf: true
},
{
cateId: '1-1-2',
cageName: '西湖区',
catePId: '1-1',
isLeaf: true
},
{
cateId: '1-1',
cageName: '杭州',
catePId: null,
isLeaf: false
},
{
cateId: '1-2',
cageName: '金华',
catePId: null,
isLeaf: false
}
]
let wenjian2 = [
{
tagId: 'abcd',
tagName: '小王',
cateId: '1-1-1'
},
{
tagId: 'efgh',
tagName: '小明',
cateId: '1-1-2'
},
{
tagId: 'xl',
tagName: '小张',
cateId: '1-1-1'
}
]
let result = []
function xunhuan(data) {
let result = [];
let obj = {}
data.forEach(item => {
obj[item.cateId] = Object.assign(item, obj[item.cateId] || {});
if (item.catePId) {
let parent = obj[item.catePId] || {};
parent.list = parent.list || [];
parent.list.push(item);
obj[item.catePId] = parent;
} else {
result.push(obj[item.cateId])
}
})
console.log(result)
return result;
}
let wenjian1Result = xunhuan(wenjian1)
function digui(data) {
if(data && data.length) {
for(let item of data) {
if(item.isLeaf) {
let dd = wenjian2.filter(i => {
if(i.cateId === item.cateId) {
return i
}
})
item.list = [].concat(dd)
} else {
digui(item.list)
}
}
}
}
digui(wenjian1Result)
console.log(wenjian1Result)
粗略实现了下,复杂度处理的不优,请朋友们指教
数据有改动,叶子节点对应 isLeaf =true才查找 wenjian2 数据
