js跳出forEach循环

来自《JavaScript权威指南(6版)》7.9.1 的描述:

注意,forEach()无法在所有元素都传递给调用的函数之前终止遍历。也就是说,没有像for循环中使用的相应的break语句。如果要提前终止,必须把forEach()方法放在一个try块中,并能抛出一个异常。如果forEach()调用的函数抛出foreach.break异常,循环会提前终止:

function foreach (a, f, t) {
    try { a.forEach (f, t); }
    catch (e) {
        if (e === foreach.break) return;
        else throw e;
    }
}

foreach.break = new Error("StopIteration");

将其添加到Array的prototype上:

Array.prototype.myForEach = function (f, t) {
    var a = this;
    try { a.forEach (f, t); }
    catch (e) {
        if (e == 'break') return;
        else throw e;
    }
}

栗子:

//返回min,max之间的数组成的数组,无序
function getArr(min,max){
    if(typeof min!=='number'||typeof max !== 'number') return [];
    var arr = [];
    for (var i = min; i <= max; i++) {
        if (arr.length<1) {
            arr.push(i);
        }else{
            var len = arr.length;
            var rIndex = Math.round(Math.random()*(len-1));
            var temp = arr[rIndex];
            arr[rIndex] = i;
            arr.push(temp);
        }
    }
    return arr;
}

getArr(1,20).myForEach(function (v, i) {
    console.log(i + ' -> ' + v);
    if (i == 10) throw 'break';
});

自定义forEach方法:

Array.prototype.myForEach = function (func) {
    var arr = this;
    for (var i = 0; i < arr.length; i++) {
        var ret= func(arr[i], i);//回调函数
        if (typeof ret !== "undefined" && (ret == null || ret == false)) break;
    }
}

使用every()和some()代替:

['a', 'b', 'c'].every(function(element, index) {
    // Do your thing, then:
    if (you_want_to_break) return false
    else return true
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值