我尝试使用break语句。但没有成功。一旦条件在内循环中匹配,我想从外循环中突破。
var dataArray = [];
for(var k = 0; k < data.length; k++) {
// Add items to array
dataArray.push(data[k].c_first_name + " " + data[k].c_last_name);
}
response(dataArray);
答案 0 :(得分:2)
当您使用forEach
时,无法暂停迭代 - 甚至不能使用return
。如果您想要一种在循环中间停止迭代的方法,则必须使用实际的for
或while
循环(可能类似于for..in
或for..of
或传统如果for(var i = 0; i < whatever; i++
是一个数组,则为三个语句myfilejob
循环。
然而,一旦你完成了这个,你就可以label循环来获得你正在寻找的确切效果:
outerDupLoop:
for (var outerIndex in myfilejob) {
var fieldMapO = myfilejob[outerIndex];
var count = 0;
innerDupLoop:
for (var innerIndex in myfilejob) {
var fieldMapI = myfilejob[innerIndex];
if(fieldMapO.key == fieldMapI.key){
$scope.dupKey = fieldMapI.key;
count ++;
}
});
if(count>1){
$scope.dups = true;
break outerDupLoop; // break from the outer loop
} else {
$scope.dups = false;
}
}
(没关系,你试图添加的break语句无论如何都在外部循环中 - 从这个例子中删除标签会使这在功能上等同。你是不是要重构(count > 1)
检查以便它会在内循环内正常工作?)
答案 1 :(得分:0)
你可以使用return,这将基本上打破循环。如果你想在内部循环中执行它,将布尔值设置为true,并在外部循环中检查它。
var dupsExist = false;
angular.forEach(myfilejob, function(fieldMapI) {
if(fieldMapO.key == fieldMapI.key){
$scope.dupKey = fieldMapI.key;
dupsExist = true;
return;
}
});
if (dupsExist){
return;
}
答案 2 :(得分:0)
我建议你在满足内心条件时定义一个bool
angular.forEach(myfilejob, function(fieldMapO) {
var count = 0;
var conditionFlag = false;
angular.forEach(myfilejob, function(fieldMapI) {
if(fieldMapO.key == fieldMapI.key){
$scope.dupKey = fieldMapI.key;
count ++;
//condition is fulfilled so boolean is true now
conditionFlag = true
return false
}
});
if(count>1){
$scope.dups = true;
}
else{
$scope.dups = false;
}
//check if condition is satisfied then exit outer loop too
if(conditionFlag){
return false;
}
});
希望有所帮助