JavaScript判断对象中的参数是否为空
需求:当全部参数为空时调用A接口,其中只要有一个参数有值,有内容就掉B接口
列如:我现在只想判断除了args.search.auditStatusBillNo这个不为空之外,其它全部返回为空,则通过验证,返回true;否则只要有一个不为空,就返回false,验证不通过
有两张写法,原生js和vue中的写法
1.原生js写法
写法一
function validateArgs(args) {
for (let key in args.search) { // 遍历args.search中的所有属性
if (key !== "auditStatusBillNo" && args.search[key] !== "") {
return false;
}
}
return true;
}
let args = { /* args数据省略 */ }; // 数据我放到下面
let isValid = validateArgs(args);
console.log(isValid); // 输出true
写法二
function validateArgs(args) {
const keys = Object.keys(args.search);
let flag = true;
for (let i = 0; i < keys.length; i++) {
if (keys[i] !== 'auditStatusBillNo' && args.search[keys[i]] !== '') {
flag = false;
break;
}
}
return flag && args.search.auditStatusBillNo !== '' && args.search.billNo !== '';
}
args数据
args: {
search: {
billNo: '', // 账单编号
shippingCompanyId: '', // 物流公司ID Long
shippingCompanyName: '', // 物流公司名称
shippingmethodId: '', // 物流方式ID
shippingmethodName: '', // 物流方式名称
orderNo: '', // 订单号
trackingOrderNo: '', // 跟踪单号
apvNo: '', // 发货单号
freightDifference: '', // 运费差异额
freightDifferenceRatio: '', // 运费差异比例
weightDifferenceValue: '', // 重量差异值
weightDifferenceRatio: '', // 重量差异比例
belongMonth: '', // 账单所属月份
startBelongData: '', // 账单所属开始月份
endBelongData: '', // 账单所属结束月份
startImportDate: '', // 开始导入时间
endImportDate: '', // 结束导入时间
startDeliveryDate: '', // 开始发货时间
endDeliveryDate: '', // 结束发货时间
ifSupplementRetreat: '', // 是否补退, 1:是;2:否
noVotesDifference: '', // 是否满足规则, 1:是;0:否
auditStatus: '', // 审核状态,待审核、已审核、可汇款、已汇款
noCompletion: '', // 查询未补全数据 1.未补全
auditStatusBillNo: '待审核' // 查询待审核、已审核、可汇款、已汇款状态
},
pageReqired: true,
limit: 20,
offset: 0
}
2.vue中的写法
// 把函数单独提出来
validateArgs(args) { // 除了auditStatusBillNo之外的属性值不为空,则返回false,否则返回true
for(let key in args.search) { // 遍历args.search中的所有属性
if (key !== 'auditStatusBillNo' && args.search[key] !== '') {
return false
}
}
return true
},
getList1(type = '1') { // type = 1是带条件查询;2是初始化查询
this.tableLoading = true
this.totalNoVotes = 0
// 数据处理
let temp = this.$cloneDeep(this.args)
temp.search.shippingmethodName = this.seekLabelList(temp.search.shippingmethodId, this.getshippingmethods)
temp.search[`start${this.tempSearch.tempsTypeVal}Date`] = this.tempSearch.startTime // 开始时间
temp.search[`end${this.tempSearch.tempsTypeVal}Date`] = this.tempSearch.endTime // 结束时间
let searchTemp = this.$cloneDeep(temp)
// console.log(searchTemp, '查询11 数据处理')
let isValid = this.validateArgs(temp) // 参数是否全部为初始值
this.sonDadArgs = searchTemp.search
let temp2 = {
search: {
auditStatusBillNo: this.args.search.auditStatusBillNo // 状态
},
pageReqired: true,
limit: 20,
offset: 0
}
// 下面这块是接口,采用A接口还是B接口
;((type === '1' && !isValid) ? arcelreconciliation(searchTemp) : searchInitialArcelreconciliation(temp2)).then(res => {
if (res.data.success) {
this.tableData = (res.data && res.data.rows) || []
this.total = (res.data && res.data.total) || 0
this.totalNoVotes = res.data.rows.reduce((index, item) => index + parseInt(item.totalNoVotes), 0)
} else {
this.$Message.error({ content: res.data.errorMsg || '小包列表查询失败!', duration: 4 })
}
}).catch(err => {
console.log(err)
}).finally(() => {
this.ids = this.$cloneDeep(this.$options.data().ids) // 初始化表格选中
this.tableLoading = false
})
}