因为循环没有返回值,我期待。 JS

时间:2014-09-29 11:04:06

标签: javascript angularjs for-loop

我有以下功能:

$scope.getObjectCount = function() {
    var theLength = _.flatten($scope.myObjects);                                
    var i;

    for ( i = 0; i < theLength.length; i++) {
        //return i here??
    }
    return i;   
}

theLength.length的计算结果为'5',因为myObjects中有5个对象。

这是在ng-repeat内部调用的,它被称为5次。我希望它返回0,1,2,3,最后4.但它每次都返回5。

我想要做的是返回数组中每个对象的索引,所以我在计算它们并每次都返回...或者尝试。

有人可以建议我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

如果您只在应用的某个部分使用此功能,则可以创建一个角度工厂作为计数器。由于数据封装在服务中,您可以从任何地方调用它。

.factory("MyCounter", function() {
  var start = 0;
  return {
    increment: function() { 
      start += 1;
    },
    currIndex: function() {
      return start;
    },
    reset: function() {
      start = 0;
    }
  };
});

现在只需将此依赖项注入控制器并在视图中调用它。

例如:

.controller("MyController", function(MyCounter) {
  // Publish our counter object to scope
  $scope.counter = MyCounter;
});

在您看来:

<div some-value="counter.increment()">...</div>

答案 1 :(得分:0)

如果您只想在每次返回的值中增加一个,那么这个简单的函数应该对您有用:

var i = -1;
function returnCount(){
    i++;
    return i;
}

alert(returnCount()); // 0
alert(returnCount()); // 1
alert(returnCount()); // 2
alert(returnCount()); // 3
alert(returnCount()); // 4

<强> See the DEMO here

但是我相信这会在长期内引起问题..所以如果这不是你想要的那么你应该更好地解释它,因为从你对我的评论的回应,我能得到的只是你想要做到这一点我上面写的是什么..

编辑您应该在您调用该函数的地方使用theLength属性:

这将是你的重复部分:

for(var i=0; i<theLength; i++){
    returnCount();
}

现在这将持续到对象计数并返回它们的索引0,1,2,3,4 ......