应用场景是用户在城市列表中想要通过一个关键字去过滤城市,这个城市有省、市层级,该关键字既可以过滤省名也可以过滤市名。如果关键字在市名中有出现,可省名中没有,那么该父级省也要包含在过滤后的数据内。数据结构就类似list这样。请问应该怎么写这个逻辑比较优雅。
var list=[
{
provincesName:'zhejiang',
citys:[
{cityName:'hangzhou'},
{cityName:'ningbo'},
]
},
{
provincesName:'jiangsu',
citys:[
{cityName:'suzhou'},
{cityName:'nanjing'},
]
},
{
provincesName:'hunan',
citys:[
{cityName:'changsha'},
]
},
...
]
这里关键字暂定为u,那么这个结果就是
var list=[
{
provincesName:'zhejiang',
citys:[
{cityName:'hangzhou'},
]
},
{
provincesName:'jiangsu',
citys:[
{cityName:'suzhou'},
]
},
{
provincesName:'hunan',
citys:[]
},
...
]
我用了一个自己觉得不太优雅的算法去处理:
let listBackUp=[]
let cityBackUp=[]
let haveCity=false
list.forEach((item,i)=>{
haveCitem=false
citemBackUp=[]
item.citys.forEach((citem,ci) => {
if(citem.cityName.indexOf('u')!=-1{
cityBackUp.push(citem)
haveCity=true
}
})
if(haveCity){
listBackUp.push({...item,city:cityBackUp})
}else{
if(item.provincesName.indexOf('u')!=-1{
listBackUp.push({...item,city:[]})
}
}
})
list=listBackUp
ps:我觉得自己的逻辑写的很糟糕,有没有地方有类似于每日一题的可以练一下简单实用的算法?