【问题标题】:Increment variable every 5 iteration of for loop?每5次for循环迭代增加变量?
【发布时间】:2017-02-09 04:14:00
【问题描述】:

我不是 100% 确定如何表达这个问题,因此请随意将问题标题更改为有意义的内容。

我有一个对象 solution,其中包含一个属性名称 days,它包含 10 个数组,请参见下面的示例

{
    "sameShiftHolds": true,
    "sameStaffHolds": true,
    "sameRoomHolds": true,
    "days": [{
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": true
    }, {
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": false
    }, {
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": true
    }, {
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": true
    }, {
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": true
    }, {
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": true
    }, {
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": true
    }, {
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": true
    }, {
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": false
    }, {
        "availableStaff": [
            [0, 1, 4, 3, 5, 9, 22, 44],
            [0, 1, 4, 3, 5, 9, 22, 44],
            [4, 8, 7]
        ],
        "availableRooms": [
            [3, 6, 77, 89, 23],
            [3, 6, 77, 89, 23],
            [2, 7, 9]
        ],
        "suitableStaff": [
            [22, 44],
            [22, 44],
            [4]
        ],
        "suitableRooms": [
            [89, 23],
            [22, 44],
            [2]
        ],
        "ValidStartDate": true
    }]
}

在我的网站上,我有一个自定义的一周日历视图,它是从周一到周五的模板创建的。默认情况下,有 2 周,但用户可以更改他们想要查看的周数。每个星期都由一个具有唯一 ID "solCol0""solCol1" 等的 div 分隔......

然后我循环选择的周数,在这种情况下我们有2。 然后循环遍历solution 的长度,在这种情况下为10。 我只想循环 5 次(一周中的每一天),然后在 5 次循环后,将 columdId 增加 1 以将详细信息附加到下一周,例如前 5 个循环附加到 "solCol0" 然后下一个5 附加到“solCol1”,如果用户选择了 2 周以上,则为 3,solution 长度将增加到 15,因此接下来的 5 个循环将附加到“'solCol2”` 等等...

抱歉,如果这不是很清楚,通常我只需要在每 5 次循环后增加一个值。任何帮助将不胜感激。

loadSolutionStartRows: function(dates, solution) {
    var self = this;
    for (var i = 0; i < dates.length; i++) {
        var columnId = "#solCol" + i;
        var startDate = moment(dates[i], 'Do MMM');
        var rowDates = [];
        var iterate = 5;
        for (var d = 0; d < solution.days.length; d++) {
            //Every 5 loops - columnId = "#solCol" + i + 1;
            rowDates.push(moment(startDate).format('ddd (Do MMM)'));
            startDate.add(1, 'days');
            var selectedDate = rowDates[d];

            var statusClass;
            var statusIconClass;
            if (solution.days[d].ValidStartDate === true) {
                statusClass = "sxpTableHeaderIconGreenStatus";
                statusIconClass = "octicon " + "octicon-check";
            }
            if (solution.days[d].ValidStartDate === false) {
                statusClass = "sxpTableHeaderIconRedStatus";
                statusIconClass = "octicon " + "octicon-x";
            }


            $(columnId).append(self.solutionTableRow({
                rowId: i + 1,
                date: selectedDate,
                statusClass: statusClass,
                statusIconClass: statusIconClass,
                trainerCountEarly: 1,
                trainerListEarly: 1,
                roomCountEarly: 1,
                roomListEarly: 1,
                trainerCountLate: 1,
                trainerListLate: 1,
                roomCountLate: 1,
                roomListLate: 1
            }));
        }
    }
}

},

通过上面的代码,我实现了下图,它增加了 10 天而不是我想要的 5 天。

【问题讨论】:

  • for (var i = 0; i
  • @twothreebrent 这将在每轮中将变量增加 5,这不是 OP 所要求的。
  • @twothreebrent 这也导致了我的无限循环
  • if (i % 5 === 0) { foo++; }
  • 那是我的错,我读到了他想做的错事。

标签: javascript jquery loops for-loop


【解决方案1】:

就像我评论的那样,您需要一个超出 for 循环范围的变量,当内部循环变量是 5 的倍数时,您可以递增该变量。这是一个示例。

var outerVar = 0;

for (var innerVar = 1; innerVar <= 10; innerVar++) {
  console.log("Iteration " + innerVar + " uses outerVar " + outerVar + ".");
  if (innerVar % 5 === 0) {
    outerVar++;
  }
}

【讨论】:

    【解决方案2】:

    您可以使用Math.floor(i/5)。它只是将i 除以 5,然后向下舍入。

    对于从 0 到 4 的 i 值返回 1,对于从 5 到 9 的 i 值等返回 1。

    在你的例子中:

     var columnId = "#solCol" + Math.floor(i/5);
    

    【讨论】:

      【解决方案3】:

      您将希望有一个每 5 次迭代递增的变量,因此您需要检查索引是否为 5 的倍数:

      var foo = 0;
      
      for (var i; i < someLength; ++i) {
        if (i % 5 === 0) {
          foo++;
        }
      }
      

      这使用模运算符来获得i / 5 的余数。如果它是 0,那么我们知道索引是 5 的倍数。

      请注意,这完全没有必要,您也可以这样做

      Math.floor(someLength / 5);
      

      或者更简洁:

      someLength / 5 | 0;
      

      两者都会将除法的结果截断为整数,并且您将知道someLength 包含多少个 5。

      【讨论】:

      • 谢谢,这确实有效,但是我认为我仍然需要更改我的代码,因为我仍然需要 10 天而不是 5 天的渲染,所以我的页面仍然像上一张图​​片一样加载。再次感谢您
      【解决方案4】:

      对于循环的每一步,检查迭代器是否能被 5 if (i % 5 == 0) 整除。如果是,请增加您的 columnId 变量

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-23
        • 2020-11-28
        • 1970-01-01
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 2012-05-19
        • 2022-01-23
        相关资源
        最近更新 更多