首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >增加变量每5次迭代的for循环?

增加变量每5次迭代的for循环?
EN

Stack Overflow用户
提问于 2016-09-30 14:32:43
回答 4查看 12.1K关注 0票数 2

我不能百分之百确定如何表达这个问题,所以请随意将问题标题改为有意义的东西。

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

代码语言:javascript
复制
{
    "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
    }]
}

在我的网站上,我有一个自定义的周日历视图,它是从一个模板创建的,从周一到周五开始。默认情况下,有两个星期,但用户可以更改他们希望看到的周数。每周由一个带有唯一id "solCol0""solCol1"等的div组成.

然后我循环循环选择的周数,在本例中我们有2。然后循环遍历solution的长度,在本例中是10。我只想循环5次(对于每周的每一天),然后在5次循环之后,将columdId增加1,以便将细节附加到下一周,例如,前5个循环被追加到"solCol0",接下来的5个循环被追加到"solCol1“,如果用户选择了超过2周,那么solution长度将增加到15,因此接下来的5个循环将追加到”solCol2“等。

对不起,如果这不是很清楚,一般情况下,我只需在每5个循环之后增加一个值。任何帮助都将不胜感激。

代码语言:javascript
复制
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天。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-30 14:45:33

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

代码语言:javascript
复制
var foo = 0;

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

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

请注意,这是完全没有必要的,你也可以这样做。

代码语言:javascript
复制
Math.floor(someLength / 5);

或者更简洁地说:

代码语言:javascript
复制
someLength / 5 | 0;

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

票数 8
EN

Stack Overflow用户

发布于 2016-09-30 14:45:42

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

这将返回从0到4的i值的1,从5到9的i的值的1,等等。

在你的例子中:

代码语言:javascript
复制
 var columnId = "#solCol" + Math.floor(i/5);
票数 1
EN

Stack Overflow用户

发布于 2016-09-30 14:45:13

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39793967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档