题目描述
有2个数组
相关代码
var a = ['customer','supplier','materal','purchaseOrder','rolesMenge']
var b = [
{
name:'maindata',
children:[
{
name:'customer',
meta:{
title:'customer'
}
},
{
name:'supplier',
meta:{
title:'supplier'
}
},
{
name:'materal',
meta:{
title:'materal'
}
},
]
},
{
name:'purchase',
children:[
{
name:'purchaseOrder',
meta:{
title:'purchaseOrder'
}
},
{
name:'purchaseGood',
meta:{
title:'purchaseGood'
}
},
]
},
{
name:'stock',
children:[
{
name:'stockOrder',
meta:{
title:'stockOrder'
}
}
]
},
{
name:'config',
children:[
{
name:'userConfig',
children:[
{
name:'rolesMenge',
meta:{
title:'rolesMenge'
}
}
]
},
]
}
]
我的代码
function getarr(a,b){
return b.reduce((k,m) => {
if(m.children){
let obj = {
name:m.name,
children:[]
}
for(let j of m.children){
if(j.children){
getarr(a,m.children)
} else {
if(a.includes(j.meta.title)){
obj.children.push(j)
}
}
}
if(obj.children.length){
k.push(obj)
}
}
return k
},[])
}
你期待的结果是什么?实际看到的错误信息又是什么?
希望得到
[
{
name: "maindata",
children:[
{
name:'customer',
meta:{
title:'customer'
}
},
{
name:'supplier',
meta:{
title:'supplier'
}
},
{
name:'materal',
meta:{
title:'materal'
}
}
]
},
{
name:'purchase',
children:[
{
name:'purchaseOrder',
meta:{
title:'purchaseOrder'
}
}
]
},
{
name:'config',
children:[
{
name:'userConfig',
children:[
{
name:'rolesMenge',
meta:{
title:'rolesMenge'
}
}
]
},
]
}
]
前不久刚回答了另一个类似的问题,本来以为是一样的,仔细分析之后发现这两个问题有一点重大差异:
新的
deal()
修改如下(含注释),顺便处理了之前那个问题结果中含大量空children
的问题不过这不是最终答案,因为代码还可以进行优化。
if
的两个分支中都需要递归,根据递归的结果来,结合对当前节点的检查来判断是否需要加入当前节点,所以循环内部可以修改一下