数组中遍历方法以及跳出循环方法

先看下面这段代码:

数组中遍历方法以及跳出循环方法_第1张图片

在for循环中想要调出整个循环是break;但是在forEach中使用break不仅不能调出整个循环,还会报错,使用return也不行;

数组中遍历方法以及跳出循环方法_第2张图片

数组中遍历方法以及跳出循环方法_第3张图片

其实这个问题是由一道编程题引发的,使用循环判断数组中是否包含某个值;当我想用forEach来循环时,发现在找到该值之后没法提前调出循环,就会造成时间复杂度的浪费,增加冗余计算,除了用for循环语句来代替forEach,还有什么解决方法呢,forEach究竟怎么跳出循环。

1、使用try...catch来调出循环

当判断条件满足时,抛出异常,编码如下:

try{
    let list = [1, 2, 3, 4, 5];
    list.forEach(el => {
        console.log(el);
        if(el ==3 ) {
            throw new Error('finish');
        }
    })
}catch(e) {
    if(e.message == 'finish') {
        console.log('All finish!');
    }else {
        console.log(e.message);     
    }
}


实际执行结果如下:

数组中遍历方法以及跳出循环方法_第4张图片

下面就继续看一下其他几个循环方法:

2、every()使用return false 跳出循环(需要配合return true使用)

语法糖:every()返回一个boolean,判断每个元素是否符合func条件。数组里面所有的元素都符合才返回true。

具体代码如下:

let func = () => {
    let list = [1, 2, 3, 4, 5];
    list.every(el => {
        if(el == 3) {
            console.log(el);
            return false;
        }else {
            console.log(el);
            return true;
        }
    })
}
func();


执行结果如图:

数组中遍历方法以及跳出循环方法_第5张图片

3、some()使用return true跳出循环

语法糖:some()返回一个boolean,判断是否有元素是否符合func条件。数组里面所有的元素有一个符合条件就返回true。

具体代码如下:

let func = () => {
    let list = [1, 2, 3, 4, 5];
    list.some(el => {
        console.log(el);
        if(el == 3) {
            return true;
        }
    })
}
func();


执行结果如图:

数组中遍历方法以及跳出循环方法_第6张图片

4、map()

语法糖:map()返回一个新的Array,每个元素为调用func的结果。新数组的长度和原来的是一样的,他只不过是逐一对原来数据里的每个元素进行操作。

map相对来说比较特殊,先看代码执行结果:

使用return true:

数组中遍历方法以及跳出循环方法_第7张图片

使用return false:

数组中遍历方法以及跳出循环方法_第8张图片

使用break:

数组中遍历方法以及跳出循环方法_第9张图片

由以上结果可以看出:map 有返回值,返回一个新的数组,每个元素为调用func的结果。不能终止循环,使用 break 会报错,使用 return false;, 输出结果中会有 false,循环不会终止。

 

你可能感兴趣的:(前端知识)