Hello!大家好,这里还是万物之恋。今天给大家带来的依旧是一道前端方面的面试题。题目是:在js中使用.forEach()方法进行遍历时,如何在需要的时机跳出循环?
说到跳出,无非就是三种,break,continue和return false。
let array = [0, 1, 2, 3, 4, 5];
for (let i = 0; i < array.length; i++) {
if (i === 2) {
break;
}
console.log(array[i]);
}
console.log("----------------")
for (let i = 0; i < array.length; i++) {
if (i === 2) {
continue;
}
console.log(array[i]);
}
两次简单的遍历,使用break和continue,同样让它们在i=2的时候跳出循环,结果如下:
我们所需要的效果,就是和break一样,只输出规定数据之前的所有数据。
我们再使用forEach去进行遍历:
array.forEach((item) => {
if (item === 2) {
// break;
// continue;
// return false;
}
console.log(item);
});
使用三种方式后得到的结果:
- break
- continue
- return false
只有return false得到了continue的效果,但依旧达不到需求。这里估计有小伙伴会问了,为什么使用break和continue会报错呢?那么在这里我们需要引入下forEach的概念。
forEach的概念
- forEach是函数,而不是例如if,for之类的语句
- forEach的参数是一个匿名函数,是一个callback
- 每次执行forEach实际上操作的是一个函数
同时还需要了解forEach的执行机制:
是对数组的每个有效元素执行一次callback函数
因此使用在语句中的break,continue无法使用。return false也只是单纯的阻止了一次操作,无法真正跳出循环。
而这个时候,我们就可以使用try…catch抛出异常的方式,在需要的时机来跳出循环,同时还可以捕获到发生异常的时机。
let k = null;
try {
array.forEach((item) => {
if (item === 2) {
k = item;
// 定义变量接收,查看它是否是在规定的时机进行了跳出
throw Error();
}
console.log(item);
})
} catch (error) {
// 由于没有错误需要抛出,所以catch里面不用写东西
}
console.log("抛出的时机:"+k);
得到结果:
这样就达到了我们需要的效果。是不是非常简单呢?当然,这只是其中一种方式,剩下的还是要靠各位自己去探索。
这里是万物之恋,我们下次再见了!