前言
使用过map的同学,在看到这个问题时,一定会给您一个否定的答案,不可以使用break。
那么在我们实际写代码的过程中,既然有了这么一个需求,那么证明我们确实需要这么干,所以今天我们就来实现这个需求。
为什么会有这么一个需求?
在这个世界中,会有公司根据代码量,来确定工作量吗?
for
假设有一组数据,我们需要通过数据中status属性,判断小说人物中,今天是否有人下山历练。
/** 历练者的名称 */
let studyUserName: string = '';
/** 记录循环次数 */
let loopCount = 0;
// 检查今天历练情况
for (let index = 0, len = datas.length; index < len; index++) {
const element = datas[index];
// 记录检测次数
loopCount++;
if (element.status) {
// 记录历练者的名称
studyUserName = element.name;
// 只要有人历练了,就结束循环。
break;
}
}
// 显示历练者的名称
console.log(studyUserName); // 周芷若
// 显示检测了几个人
console.log(loopCount); // 3
从上面的代码中,我们看到总共4个人,只检测了3个人,就知道了周芷若下山历练了。
功能是实现了,但是代码写了一大堆。所以我们开始使用forEach,map等,来减少代码量。
forEach、map
/** 历练者的名称 */
let studyUserName: string = '';
/** 记录循环次数 */
let loopCount = 0;
// 检查今天历练情况
datas.forEach(user => {
// 记录检测次数
loopCount++;
// 记录历练者的名称
user.status && (studyUserName = user.name);
if (user.status) {
// break; 无法使用,只能检测所有人。
}
})
// 显示历练者的名称
console.log(studyUserName); // 周芷若
// 显示检测了几个人
console.log(loopCount); // 4
从上面的代码中,我们看到找出了历练者,但是检测了所有人。怎么办?
some
some只要有一次返回真,就结束循环。
/** 历练者的名称 */
let studyUserName: string = '';
/** 记录循环次数 */
let loopCount = 0;
// 检查今天历练情况
datas.some(user => {
// 记录检测次数
loopCount++;
// 如果有人历练了,就跳出循环。
return user.status && (studyUserName = user.name);
})
// 显示历练者的名称
console.log(studyUserName); // 周芷若
// 显示检测了几个人
console.log(loopCount); // 3
// 精简后的代码
/** 历练者的名称 */
let studyUserName: string = '';
// 检查今天历练情况
datas.some(user => user.status && (studyUserName = user.name));
// 显示历练者的名称
console.log(studyUserName); // 周芷若
结语
所以,想在map中使用break,大概是因为for循环写的代码太多了吧,而且还容易出错。
那么以后,您可以通过使用some来实现break的功能,从此走上人生巅峰,……。
人人为我,我为人人,谢谢您的浏览,我们一起加油吧。