在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
如何正确使用休息?
答案 0 :(得分:4)
break
中forEach
没有内置功能。要中断执行,你必须抛出某种异常。例如
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;