描述
在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判断条件:
- 则forEach中return之后,后面的循环还会执行,会返回true。
- 如果使用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;
}