gpt4 book ai didi

javascript - 在javascript/angular中退出嵌套的foreach(函数)循环

转载 作者:行者123 更新时间:2023-11-30 12:46:03 25 4
gpt4 key购买 nike

我正在尝试检查我的表单中所有需要的字段 (isRequired=true) 是否都已填写。我通过将表单结构 (assesmentForm) 与用户响应(在 $scope 上)进行比较来做到这一点。我不想知道有关该字段的一些细节(从 VF 开始),我希望它在找到未完成的字段后停止。问题是当我在 forEach 循环中使用“return”时——它没有退出 forEach,而是进入下一次迭代(下一个函数)。我尝试使用:中断、继续、标记等'我真的需要一些帮助

function checkFieldsValidation () {
var VFflag =true; //Validation Failed Flag - true: not failed, False - failed
assessmentForm.Objectives.forEach(function(o){
if (VFflag){
o.component.Fields.forEach(function(f){
if (VFflag){
if (f.IsRequired ){
for (var i in $scope.responses )
{
if( $scope.responses[i].objectives[o.relationship.ActivityRelationshipID][f.FieldID].value.length>0){
VFflag=VFflag;
}
else
{
var VFparIndex=i;
var VFActivityRelationshipID=o.relationship.ActivityRelationshipID;
var VFFieldID = f.FieldID;
VFflag=false;
return;
}
}
}
}
else {return;}
}
)
} else {return;}
}
)
return [VFflag,VFparIndex,VFActivityRelationshipID,VFFieldID];
}

最佳答案

TLDR:使用 .every 而不是 .forEach

来自 the MDN page on forEach :

Note : There is no way to stop or break a forEach loop. The solution is to use Array.every or Array.some.

如果您使用 .every 而不是 .forEach,您将能够在第一次验证失败时停止。有关更多示例,请参阅该 MDN 页面,其中一个来自 .every 页面:

function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);


--- 编辑:如何与对象一起使用 --

在评论中,您询问了如何对对象执行此操作,就像您在示例中对 of 所做的那样。

当前您正在定义匿名函数

function(o){ .... }

在循环中使用。这意味着 forEach 调用正在接收该函数,并且对于数组中的每个项目,它调用以当前数组项目作为参数的函数。

在上面的例子中,发生了同样的事情;让我们更简单地做到这一点:

var numbers = [12, 5, 8, 130, 44];
var allValid = numbers.every(function(num) { return (num > 10) });

这次我们使用匿名函数。 .every 的 MDN 页面指出:“使用三个参数调用回调:元素的值、元素的索引和正在遍历的 Array 对象”——它们被命名为 element indexarray 在顶部的示例中。由于您只需要数组的当前元素,因此只需在函数中提供一个参数名称 (function(o)) 而不是三个 (function(o, index, array)).如果您需要知道自己在数组中的位置,那么其他两个非常有用。

关于javascript - 在javascript/angular中退出嵌套的foreach(函数)循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22454984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com