如何在javascript中使用forEach中的break?

时间:2016-06-16 11:54:13

标签: javascript reactjs babel

在reactjs-babel应用程序中,我发现在break

中尝试使用forEach的奇怪行为
    var SomeElement = React.CreateClass({
        ... ,
        getMessageStatus: function getMessageStatus(message) {
            var states = this.state.messages_states;
            var status = undefined;
            states.forEach(function (messageEntity) {
                if (messageEntity.id == message.id && messageEntity.is_question == message.is_question) {
                    status = messageEntity.status;
                    break; // - this is not working 
                }
            });
            return status;
        },
        ...
        });

休息在PhpStorm中说Cannot determine target for 'break'而Babel repl告诉repl: Unsyntactic break 如何正确使用休息?

2 个答案:

答案 0 :(得分:4)

breakforEach没有内置功能。要中断执行,你必须抛出某种异常。例如

var BreakException= {};

try {
    [1,2,3].forEach(function(el) {
        if(el === 1) throw BreakException;
    });
} catch(e) {
    if (e!==BreakException) throw e;
}

JavaScript异常并不是非常漂亮。如果你真的需要for里面的传统break循环可能更合适。

相反,使用Array#some

[1,2,3].some(function(el) {
    return el === 1;
});

这是有效的,因为只要以数组顺序执行的任何回调,some返回true,就会返回true,从而使其余的执行短路。

some,其倒数every(将停留在return false上)和forEach都是ECMAScript第五版方法,需要添加到{ {1}}在他们失踪的浏览器上。{/ p>

答案 1 :(得分:2)

第一次出现forEach时,无需break。只需使用find()代替。

 status = states.find((messageEntity) => 
     messageEntity.id == message.id && messageEntity.is_question == message.is_question
 ).status;