带数字键的非关联数组返回长度为0

时间:2015-08-03 13:20:35

标签: javascript arrays angularjs angularjs-scope angular-promise

我想遍历一个数组$scope.todos

for (var i = $scope.todos.length - 1; i >= 0; i--) {
   console.log($scope.todos[i]);
};

$scope.todos.length会返回0

$scope.todos

看起来像这样:

array

我做错了什么?我认为这不是一个关联数组?索引是数字?它不返回undefined,只返回0.感谢您的帮助。

编辑:更多代码

'use strict';

angular.module('todos')

.controller('TodosController', ['$scope', '$location', '$state',      '$stateParams', 'Todos',
function($scope, $location, $state, $stateParams, Todos) {

    console.log($scope.todos);
    console.log($scope.todos.length);

    function calculateDayAygoForTodos(){
        //foreach todo in todos
            for (var i = $scope.todos.length - 1; i >= 0; i--) {
                console.log("todos length");
                    console.log($scope.todos[i]);
            };


     }

解决方案: 问题是函数的异步性质,我试图在todos加载之前调用$scope.todos.length。使用timeOut函数解决了一个简单的延迟:

setTimeout(function() {
  console.log($scope.todos.length);
}, 1000);

可能不是最佳解决方案,但现在我没有得到ùndefined`any,而是数组的长度。感谢War10ck指出这一点。

2 个答案:

答案 0 :(得分:-1)

可能没有设置length属性。

@steppefox(在他的回答中)有一个很好的和可靠的迭代数组的方法。

迭代数组的另一种方法是使用lodash forEach函数,它的功能类似,但据说效果更好。

检查其他阵列操作的lodash。它有很多。

答案 1 :(得分:-2)

您可以使用:

循环遍历数组或对象
angular.forEach($scope.todos,function(item,index){

});