1-8关于数组判断相同和项目结合的优化方法

销户系统

1.修复销户账户检验的一个比较复杂的BUG,一步步定位到了数组方法如下:

util: {
    // 比较两个数组是否相同
    arrayEquals(array1, array2) {
      return (
        array1.length === array2.length &&
        array1.every((value, index) => value === array2[index])
      );
    },
    // 延迟
    delay(ms: number, val?: any) {
      return new Promise(resolve => setTimeout(resolve, ms, val));
    }
  }

JavaScript Array every() 方法
通过vue的调试,发现很可能是两个数组的问题,值是一样的,但是通过勾选push,和取消勾选splice,导致两个数组的索引和值上并不是一一对应的,所以返回了false。

get isCanApply() {
      // 选择过中登注销选项的 index
      let csdcList = [];
      // 如果没有证券账户则视为可提交
      if (this.accounts.length === 0) return true;
      this.accounts.forEach((account, i) => {
        if (account.csdcCancelFlag) {
          csdcList.push(i);
        }
      });
      // console.log('csdcList', csdcList, 'this.accounts', this.accounts);
      // 排除一个都没选的状态
      if (csdcList.length === 0) return false;
      // 需要选择账户
      if (this.useSelect) {
        if (this.checkAccountIndexList.length === 0) return false;
        if (!this.$App.util.arrayEquals(this.checkAccountIndexList, csdcList)) return false;
      }
      else {
        // 全都要选择且校验通过
        return csdcList.length == this.accounts.length;
      }
      return true;
    }

下面有两种解决方案:
1.修改数组判断方法,只要两者对应的值是一样的即可,不必管索引
2.修改原有逻辑的Push,使得顺序一致。

但是明显你无法预测用户会以怎么样的顺序去勾选以及选择中登账户,所以修改Push方法是不行的。修改数组判断方法是简单有效的。

修改方法如下:我只需要判断数组里的值的和相等即可,因为值都是唯一的,而且限定两个数组长度相等。近似可以转化为现在问题的解决办法

 // 比较两个数组是否相同(注,原来的方法是必须索引相同对应的值也相同,但是根据具体情况,需要改成和相同即可)
    arrayEquals(array1, array2) {
      return (
        array1.length === array2.length &&
        this.sumArray(array1)===this.sumArray(array2)
      );
    },
    // 延迟
    delay(ms: number, val?: any) {
      return new Promise(resolve => setTimeout(resolve, ms, val));
    },
    //数组求和方法
    sumArray(array){
      let sum=0;
      for(let item of array){
        sum=sum+item
      }
      return sum
    }

然后问题还是没有得到解决,因为1+5=2+4,所以以下情况还是会显示可以进行下一步:
在这里插入图片描述

最后利用sort()方法,解决问题:
JavaScript sort() 方法


  util: {
    // 比较两个数组是否相同
    arrayEquals(array1, array2) {
      array1.sort();
      array2.sort();
      return (
        array1.length === array2.length &&
        array1.every((value, index) => value === array2[index])
      );
    },

先进行排序,再做值和索引的一一对应即可
\

vue-music

1.使用vue-lazyload实现图片懒加载,即一开始不请求所有图片,而是等待滑动到指定位置才进行请求。学习一个插件,最好是官方文档进行学习

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值