短路数组.forEach 喜欢调用中断
2022-08-29 21:55:00
[1,2,3].forEach(function(el) {
if(el === 1) break;
});
我如何使用JavaScript中的新方法执行此操作?我试过了 ,和 . 崩溃,除了继续迭代之外什么都不做。forEach
return;
return false;
break
break
return
[1,2,3].forEach(function(el) {
if(el === 1) break;
});
我如何使用JavaScript中的新方法执行此操作?我试过了 ,和 . 崩溃,除了继续迭代之外什么都不做。forEach
return;
return false;
break
break
return
没有内置功能。要中断执行,您必须引发某种异常。例如。break
forEach
var BreakException = {};
try {
[1, 2, 3].forEach(function(el) {
console.log(el);
if (el === 2) throw BreakException;
});
} catch (e) {
if (e !== BreakException) throw e;
}
JavaScript例外并不是非常漂亮。如果您确实需要在其中,则传统循环可能更合适。for
break
数组#一些
相反,请使用 Array#some
:
[1, 2, 3].some(function(el) {
console.log(el);
return el === 2;
});
这是有效的,因为只要任何按数组顺序执行的回调返回,就会返回,使其余回调的执行短路。some
true
true
some
,它的逆 every
(这将停止在 a 上),并且都是 ECMAScript 第五版方法,需要将它们添加到缺少它们的浏览器上。return false
forEach
Array.prototype
现在有一个更好的方法可以在 ECMAScript2015(又名 ES6)中使用新的 for of 循环来做到这一点。例如,此代码不打印数字 5 后面的数组元素:
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (const el of arr) {
console.log(el);
if (el === 5) {
break;
}
}
从文档中:
两者都是为了...在和为...的语句迭代某些内容。它们之间的主要区别在于它们迭代的内容。的...in 语句以原始插入顺序循环访问对象的可枚举属性。的...of 语句循环访问可迭代对象定义为迭代的数据。
在迭代中需要索引?您可以使用 Array.entries()
:
for (const [index, el] of arr.entries()) {
if ( index === 5 ) break;
}