js的for循环中return可以跳出循环,而使用forEach等不可以跳出循环

描述

在vue项目中做表格增加行的时候,校验行内单元格某些字段的必填项,刚开始使用forEach进行循环遍历数组对象,然后判断对象的键值是否为空,为空则跳出循环,提示需要填写必填项,否则提示进行增加行。

forEach形式返回

isCheckRowRequired () { // 检测新增行内容必填项
 // let checkArr = ['packageName', 'bidFee', 'checkPrice', 'bidStatus'];
    let checkArr = ['packageName', 'bidStatus']; // 排除金额的,金额可为0, 0为false ,可单独验证 || lastRow['bidFee'] < 0 || lastRow['checkPrice'] < 0,此处金额默认为0
    this.tableData.forEach(item => {
        for (const key in item) {
            if (!item[key] && checkArr.indexOf(key) >= 0) {
                return false;
            }
        }
    })
    return true;
},
// 调用此满足条件方法会返回true

for循环形式,会跳出循环

isCheckRowRequired () { // 检测新增行内容必填项
    // let checkArr = ['packageName', 'bidFee', 'checkPrice', 'bidStatus'];
    let checkArr = ['packageName', 'bidStatus']; // 排除金额的,金额可为0, 0为false ,可单独验证 || lastRow['bidFee'] < 0 || lastRow['checkPrice'] < 0,此处金额默认为0
    for (let i = 0; i < this.tableData.length; i++) { // 校验所有行,解决填了之后删除的问题
        for (let key in this.tableData[i]) {
            if (!this.tableData[i][key] && checkArr.indexOf(key) >= 0) {
                return false;
            }
        }
    }
    return true;
},
// 此方法会跳出循环

上述两种方式调用的区别比较

假设条件:如果调用isCheckRowRequired()方法,假如表单为空,满足if判断条件:

  1. 则forEach中return之后,后面的循环还会执行,会返回true。
  2. 如果使用for循环,则会跳出循环,返回false,后面不执行
if (!this.isCheckRowRequired()) {
	this.$Message.error(`请填写详细列表必填项后再新增!`);
	return false;
}

简单案例二

<script>
    window.onload = function() {
        let arr = [1, 2, 3, 4, 5]
        arr.forEach(item => {
            if (item === 2) {
                return true;
            }
            console.log(item); // 1 3 4 5
        })

        for (let index = 0; index < arr.length; index++) {
            if (arr[index] === 2) {
                return true;
            }
            console.log(arr[index]); // 1
        }
    }
</script>

switch case的妙用

方式一:

calculationRangeAmount (price) { // 当“是否投标”为是即状态为1的时候,投标保证金根据限价自动计算
  switch (true) { // 不能写switch(price),因为表达式值为bool类型,如果case后面是表达式,如果写成这种,会直接执行default。
    case price < 20:
          return 0;
      case price < 50:
          return 4000;
      default:
          return 8000;
  }
}

方式二:正常使用

var d=new Date().getDay(); 
switch (d) 
{ 
  case 0:x="今天是星期日"; 
  break; 
  case 1:x="今天是星期一"; 
  break; 
  case 2:x="今天是星期二"; 
  break; 
  case 3:x="今天是星期三"; 
  break; 
  case 4:x="今天是星期四"; 
  break; 
  case 5:x="今天是星期五"; 
  break; 
  case 6:x="今天是星期六"; 
  break; 
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值