【发布时间】:2017-08-14 01:48:09
【问题描述】:
我正在使用从 JavaScript 中的数组调用的 forEach() 方法。当我在为数组中的每个元素调用的方法内部某处写return; 时,我从为特定元素调用的方法中返回,仅此而已。但我真正想要的是从数组调用 forEach() 的方法中返回。代码如下:
function addToCart(pizza, size)
{
Cart.forEach(function(cartItem)
{
if(pizzaAndSizeAreTheSame(cartItem, pizza, size))
{
cartItem.quantity++;
updateCart();
//Want go out from addToCart if this return is reached
return;
}
});
//Don`t want the code run after return;
Cart.push
({
pizza: pizza,
size: size,
quantity: 1
});
updateCart();
}
这是我到目前为止提出的解决方案:
function addToCart(pizza, size)
{
var leaveTheMethod = false;
Cart.forEach(function(cartItem)
{
if(pizzaAndSizeAreTheSame(cartItem, pizza, size))
{
cartItem.quantity++;
updateCart();
leveTheMethod = true;
}
});
if(leaveTheMethod)
{return;}
//Don`t want the code run after return;
Cart.push
({
pizza: pizza,
size: size,
quantity: 1
});
updateCart();
}
我想知道有没有更好的解决方案。
与那个问题相比:How to short circuit Array.forEach like calling break? 我对了解 forEach() 循环中的新方法不感兴趣,我想打破的不是 forEach(),而是包含 forEach() 调用方方法。
【问题讨论】:
-
从语句返回的唯一方法是抛出/捕获:stackoverflow.com/questions/2641347/…
-
对,
.some()就是您要找的。如果回调返回true,则迭代停止,.some()也返回true。 -
我的首选方式是使用 lodash... _.forEach 可以处理 return false;打破循环,任何变量设置为 true 表示退出函数。
标签: javascript arrays foreach ecmascript-5