我需要一些帮助。我有2个循环来遍历两个记录列表。事情是,在某些时候应该休息一下,因为最后一个循环粉碎了我正在寻找的价值。
这是我的代码
for (var i in $scope.users) {
for (var j in $scope.states) {
if ($scope.users[i].id === $scope.states[j].user) {
if ($scope.states[j].estado === 'totallyBussy') {
$scope.users[i].estado= 'Not available';
} else if ($scope.states[j].estado === 'partlyBussy') {
$scope.users[i].estado= 'Maybe available';
}
}
else {
$scope.users[i].estado= 'Available';
}
}
}
用户4和用户5应该是'可用'和'不可用',但是使用此代码,我得到'可用于用户0,1,2,3和最后一个。而最后一个是与其他人粉碎。
我希望我能解释清楚。
非常感谢
答案 0 :(得分:0)
你可以添加一个标志,当你得到你想要的值时,它会变为真。
类似
var gotValue = false;
for (var i in $scope.users) {
if(!gotValue)
{
for (var j in $scope.states) {
if ($scope.users[i].id === $scope.states[j].user) {
if ($scope.states[j].estado === 'totallyBussy') {
$scope.users[i].estado= 'Not available';
gotValue = true;
} else if ($scope.states[j].estado === 'partlyBussy') {
$scope.users[i].estado= 'Maybe available';
gotValue = true;
}
}
else {
$scope.users[i].estado= 'Available';
gotValue = true;
}
}
}
}
答案 1 :(得分:0)
您可以使用break
关键字,这将在执行时结束循环。
一方面注意:您不想使用 for (var i in array) {}
,因为您可能会遍历数组属性(并且i
采用意外值)。
我用更可靠的迭代更新了你的代码。
for (var i = 0, il = $scope.users.length; i < il; i++) {
var user = $scope.users[i];
for (var j = 0, jl = $scope.states.length; j < jl; j ++) {
var state = $scope.states[j];
if (user.id === state.user) {
if (state.estado === 'totallyBussy') {
user.estado = 'Not available';
} else if (state.estado === 'partlyBussy') {
user.estado = 'Maybe available';
}
// Go to the next user (break the "states" loop)
break;
} else {
user.estado = 'Available';
}
}
}
编辑:如果$scope.users
和$scope.states
不是数组但实际上是对象(这对我来说似乎很奇怪),你可以保留for (var i in object) {}
但是你必须在循环中添加一个检查:if (object.hasOwnProperty(i)) {}
。
答案 2 :(得分:0)
在AngularJS中,循环没有中断等,所以必须手动使用逻辑。
已经证明了类似的案例here。
在这里,我创建了一个变量f
,最初设置为false
。在forEach
循环中,根据条件,它会转到true
,进一步作为break
。
请找到以下代码:
HTML:
<div ng-app="app" ng-controller="test"></div>
JS:
var app = angular.module('app',[]);
app.controller ('test', function ($scope){
var f = false;
angular.forEach([1,2,3,4,5], function(v,k){
if(k > 2){
f = true;
}
if(!f) {
document.write('value = ' + v + ' <br>');
}
});
});