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

先看下面这段代码:

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

其实这个问题是由一道编程题引发的,使用循环判断数组中是否包含某个值;当我想用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);     
    }
}


实际执行结果如下:

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

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();


执行结果如图:

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();


执行结果如图:

4、map()

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

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

使用return true:

使用return false:

使用break:

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

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
JavaScript数组有多种常用方法,例如for循环、forEach方法、map方法、reduce方法等。我们可以通过性能分析对比它们的效率。 首先是for循环,它是最基本的遍方式。通过使用索引来访问数组元素,可以在遍过程直接对元素进行操作。这种方法是最快的,因为它没有额外的函数调用开销,并且可以灵活地控制遍过程。 其次是forEach方法,它是ES5引入的数组方法之一。它提供了一种简洁易懂的遍方式,可以通过回调函数来处理每个元素。然而,forEach方法不能跳出循环,也不能直接修改原数组的值。因此,如果需要在循环进行复杂的操作,它可能会导致一些性能上的损失。 再次是map方法,它也是ES5数组方法之一。它可以通过回调函数对数组的每个元素进行操作,并将结果存储在一个新的数组返回。map方法会创建一个新的数组,因此在性能方面相对较低。如果只需要遍数组而不需要返回新的数组,推荐使用forEach方法,它更高效。 最后是reduce方法,它也是ES5数组方法之一。它可以通过回调函数对数组的每个元素进行累积操作,最终返回一个累积值。reduce方法是一种非常灵活且强大的遍方式,但相对而言性能相对较低。如果只需要遍数组而不需要累积值,使用forEach方法会更高效。 综上所述,for循环是性能最高的遍方式,但不如其他方法简洁易懂。根据实际需求来选择合适的遍方法,可以在性能和代码可读性之间找到平衡点。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值