miniminixu 2019-03-18 20:49 采纳率: 75%
浏览 1116
已采纳

如何解决这个数组中的过滤问题?

应用场景是用户在城市列表中想要通过一个关键字去过滤城市,这个城市有省、市层级,该关键字既可以过滤省名也可以过滤市名。如果关键字在市名中有出现,可省名中没有,那么该父级省也要包含在过滤后的数据内。数据结构就类似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:我觉得自己的逻辑写的很糟糕,有没有地方有类似于每日一题的可以练一下简单实用的算法?

  • 写回答

1条回答 默认 最新

  • 天际的海浪 2019-03-19 02:07
    关注
    list = list.filter(v=>{
        v.citys = v.citys.filter(w=>w.cityName.indexOf("u")!=-1);
        return v.provincesName.indexOf("u")!=-1 || v.citys.length>0;
    });
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000