【问题标题】:How can I do reverse in a for loop?如何在 for 循环中进行反转?
【发布时间】:2015-07-20 21:07:57
【问题描述】:

我有这个Js方法但是我不能实现反向循环

$scope.organizeByMonth = function () {    
    for (var i in $scope.incidents) {

        var month = new Date($scope.incidents[i].upload_date).getMonth();    
        if (!monthIncidents[month]) {

            monthIncidents[month] = {    
                name: $scope.months[month],
                incidents: []
            };
        }
        var incident = $scope.incidents[i];    
        incident.index = i;    
        monthIncidents[month].incidents.push(incident);
    }
};

如何反向显示相同的对象:/

【问题讨论】:

  • 如果 $scope.incidents 是一个数组,请参见 stackoverflow.com/questions/500504/…(看起来是因为 push 用于类似的名称)。如果它是一个数组,它可以在迭代之前很容易地反转;或者可以简单地使用“explicit for”形式。

标签: javascript angularjs


【解决方案1】:

你不能用for in 语法做一个反向循环——这也没关系。 JavaScript 中的对象是无序的。

【讨论】:

  • 也许更重要的是:代码可能错误地将for..in 用于数组。
【解决方案2】:

最接近反向 for..in.. 循环的方法是获取对象键并向后迭代它们:

var object = { a: 1, b: 2, c: 3 };
var keys = Object.keys(object);
for(var i = keys.length - 1; i >= 0; i--) {
    console.log(keys[i], object[keys[i]]);
}

http://jsfiddle.net/1oztmp2e/

【讨论】:

  • 对于一个对象来说无关紧要,它们是无序的!
  • 没有什么能阻止您通过 sort 调用对键进行排序。这完全取决于 OP 以及他打算如何使用它。
  • 您无法对键进行排序,可能会因浏览器而异。
  • 当然可以。如果我们都引用var keys = Object.keys(object);
【解决方案3】:

为什么要反转 for 循环?只是为了展示吗?

如果是这样,我假设您正在使用 ng-repeat 来显示记录。如果是这种情况,您可以使用a custom reverse filter

或者如果您出于其他原因需要反转数组,只需在填充数组后使用Array.reverse

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多