// 处理年份
var index = 0;
while (index < this.clientIncomeDatas.datas[0].data.list.length) {
let self = this.clientIncomeDatas.datas[0].data.list;
let item = self[index];
var flag = true;
// 通过使用try抛出异常来实现更高效率的停止循环 , 因为forEach内无法使用break结束循环 , 所以使用了try
try {
self.forEach((it, i) => {
// console.log(item.year);
// 循环判断item是否比每一个it都大
if (!flag) {
// 一旦当前循环判断的年不是最大 , 那么后续就不再进行判断
throw new Error('跳出循环');
}
// 一旦小于就会无法再新进行循环 , 每次都会被return掉
// console.log(item.year);
if (item.year < it.year) {
// 一旦不大于it 那么 flag为false 停止循环判断大小
flag = false;
// 当年份不是最大时 , 就可以开始新一轮的循环判断大小 , 在此处让while循环index++
index++;
return;
} else if (flag && i >= self.length - 1) {
// 如果每次都大于 , 循环了所有的it 那么就截取这个最大值放进新的数组 , 开始新的循环
this.newList.push(self.splice(index, 1)[0]);
// 因为要让数组内年份从第一个开始继续和每个对象判断 , 所以找到最大的截取后 , 将循环索引归零 , 这也是为什么外层要是用for循环的原因 , 因为forEach一类的方法 无法重置循环
index = 0;
return;
}
});
} catch (e){
//上面抛出一个Error对象 , 这里判断 , 如果不是我自己设定好的错误提示那么就打印出这个错误
if( e.message != '跳出循环' ) throw e.message;
}
}
网友评论