销户系统
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实现图片懒加载,即一开始不请求所有图片,而是等待滑动到指定位置才进行请求。学习一个插件,最好是官方文档进行学习