如何使用for循环遍历角度$ scope变量

时间:2017-02-02 19:22:20

标签: javascript html angularjs for-loop angularjs-scope

我想使用for循环遍历数组,而不是使用foreach,我无法打破循环。但是在for循环中我将$ scope.items [i]视为未定义! 这里我根据条件在数组中动态添加值。

$scope.items= [{
        name: 'abhishek',
        credit: 1233,
        debit: 0,
        balance: 12
}];
for (var i = 1; i <= $scope.items.length; i++) {
        console.log($scope.items.length);
        if ($scope.selectedName.value === $scope.items[i].name) {
            console.log($scope.items[i].name + "forif" + true);
            break;
        }
        else {
            console.log($scope.items[i].name + "forelse " + false);               
            break;                
        }
}

3 个答案:

答案 0 :(得分:2)

这是因为你在索引1处开始你的for循环。在Javascript中对数组进行了0索引,因此将i = 1更改为i = 0并且你应该能够访问该对象( s)在你的阵列中。

因此,for循环应使用小于(<)运算符而非({<=运算符来检查索引是否小于数组的长度{1}})。

来源:MDN

  

JavaScript数组是零索引的:数组的第一个元素是索引0,最后一个元素的索引等于数组的长度属性减去1的值。

此代码运行正常(我不知道您是如何设置selectedName的,但我只是在我的示例中对其进行了硬编码:

&#13;
&#13;
$scope.selectedName = {value: 'abhishek'};

$scope.items= [{
        name: 'abhishek',
        credit: 1233,
        debit: 0,
        balance: 12
}];

for (var i = 0; i <= $scope.items.length; i++) {
        console.log($scope.items.length);
        if ($scope.selectedName.value === $scope.items[i].name) {
            console.log($scope.items[i].name + "forif" + true);
            break;
        }
        else {
            console.log($scope.items[i].name + "forelse " + false);               
            break;                
        }
}
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您正在迭代对象的数组,因此您需要遍历内部循环内对象的属性

我们还希望避免使用for in循环,因此使用Object.keys()

for (let item of $scope.items)
    for (let key of Object.keys(item))
        console.log(key, '->', item[key])

会显示

    name -> abhishek
    credit -> 1233
    debit -> 0
    balance -> 12

答案 2 :(得分:0)

一些观察结果:

  • 您收到错误是因为代码中未定义$scope.selectedName
  • 您正在尝试访问$scope.items[i].name,其中i的值最初在for循环中分配给1。因此,$scope.items[1]不存在。

您必须更改for loop逻辑。

使用此功能:

for (var i = 0; i < $scope.items.length; i++) { ... }

代替:

for (var i = 1; i <= $scope.items.length; i++) { ... }

工作演示:

&#13;
&#13;
var myApp = angular.module('myApp',[]);

myApp.controller('MyCtrl',function($scope) {
    $scope.items= [{
        name: 'abhishek',
        credit: 1233,
        debit: 0,
        balance: 12
    }];
    $scope.selectedName= {
        value: 'abhishek'
    };
    for (var i = 0; i < $scope.items.length; i++) {
        console.log($scope.items.length);
        if ($scope.selectedName.value === $scope.items[i].name) {
            console.log($scope.items[i].name + "forif" + true);
            break;
        }
        else {
            console.log($scope.items[i].name + "forelse " + false);
            break;                
        }
    }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
</div>
&#13;
&#13;
&#13;