简化嵌套for循环

 

 业务场景是这样的:老板让我写一个函数,分别取零售店的类目和市场的类目进行比较,看零售店是否有多的类目,然后给这个类目打上标记。

你可以理解为取两张表,A,B,比较A,B,如果A表中的内容B表中找不到就给这个内容打上标记,最后返回A表。

首先是异步取两张表,同时等待两个异步操作,所以我用了一个Promise.all来等待获取两个Promise的返回结果,接着用一个嵌套for循环进行比较。然后觉得这个代码写的也太冗余了。于是决定用点小技巧。

原先选用for循环是方式是防止自己想要break,写完后发现逻辑上都是要比较的,所以不用break,用forEach就没问题了。然后,第二个for循环其实是做一个比较,那么就想到数组的方法Array.some(),有true则true,所有都为false时则为false,正好符合我的业务场景。于是做了以下简化。

最开始写的:

    let twoCategories = await Promise.all([this.getRetailCategoryList(),this.getCateTreeByOpenCode()])
    let shopCategories = twoCategories[0]
    let carrierCategories = twoCategories[1]
    for(let i=0;i<shopCategories.length;i++){
      let shopCate = shopCategories[i]
      let diffLength = 0
      for(let j=0;j<carrierCategories.length;j++){
        let carrierCate = carrierCategories[j]
        if(shopCate.name != carrierCate.name){
          diffLength++
        }
      }
      if(diffLength==carrierCategories.length){
        shopCate.isOnlyShop = true
      }
    }

简化后: 

    let twoCategories = await Promise.all([this.getRetailCategoryList(),this.getCateTreeByOpenCode()]);
    let shopCategories = twoCategories[0],carrierCategories = twoCategories[1];
    shopCategories.forEach((shopCate)=>{
      let isAllDiff = carrierCategories.some((carrierCate)=>carrierCate.name==shopCate.name);
      shopCate.isOnlyShop = !isAllDiff;
    })

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值