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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?