For循环不打印所有阵列

时间:2017-07-19 10:31:28

标签: javascript arrays for-loop

var dd = new Date();
var nn = dd.getDay();

console.log(nn);

var dates = ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"];
var ordered = [];
for(var i = 0; i < dates.length; i++) {
         console.log(nn+i)
         ordered.push(dates[nn+i])
}

console.log(ordered);

嗨嗨,我遇到了这个问题。现在我可以得到当天,在阵列中搜索并从那天开始打印。但问题是前几天没有印刷。

上面的代码将打印一个包含7个元素的数组:

["Miércoles", "Jueves", "Viernes", "Sábado", undefined, undefined, undefined]

nn + 1执行从3到9的迭代,其中7,8和9为空白。如果你想知道为什么我把“Domingo”(星期日)作为数组的第一个元素是因为getDay()的工作原理。

如果不修改数组的长度,我如何添加其他未打印的日期?答案可能很明显,但我被卡住了......

提前致谢。

6 个答案:

答案 0 :(得分:2)

您可以使用模运算符轻松解决此问题,以使索引环绕。因为您将当天添加到当前索引,所以您将超出数组的限制,并且未定义将添加到数组中。

var dd = new Date();
var nn = dd.getDay();

console.log(nn);

var dates = ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"];
var ordered = [];
for(var i = 0; i < dates.length; i++) {
         console.log((nn+i) % dates.length)
         ordered.push(dates[(nn+i) % dates.length])
}

console.log(ordered);

答案 1 :(得分:1)

  

上面的代码将打印一个包含7个元素的数组

这将取决于它是什么日子,因为你有:

var nn = dd.getDay();

然后在你的循环中:

ordered.push(dates[nn+i])

然后nn+部分属于那里。

如果您的目标是在数组中的第一天nn,然后按顺序执行其他操作,请使用remainder运算符,以便将nn+i的结果包裹起来到数组的开头:

ordered.push(dates[(nn+i) % dates.length])

首先,nn+i在范围内,例如,如果nn为3,则(3+0) % 73 % 7,即为i,但后来为{{ 1}}增加,你到达nn+i超出数组末尾的点; %运算符为您包装它。例如,当您进入第五次循环迭代时,(3+4) % 77 % 70

直播示例:

var dd = new Date();
var nn = dd.getDay();

console.log(nn);

var dates = ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"];
var ordered = [];
for(var i = 0; i < dates.length; i++) {
    console.log(nn+i);
    ordered.push(dates[(nn+i) % dates.length]);
}

console.log(ordered);
.as-console-wrapper {
  max-height: 100% !important;
}

答案 2 :(得分:1)

似乎这就是你想要做的事情

var dd = new Date();
var nn = dd.getDay();

console.log(nn);

var dates = [
  'Domingo',
  'Lunes',
  'Martes',
  'Miércoles',
  'Jueves',
  'Viernes',
  'Sábado',
];
var ordered = [];
for (var i = 0; i < dates.length; i++) {
  console.log((nn + i) % 7);
  ordered.push(dates[(nn + i) % 7]);
}

console.log(ordered);

它使用modulo 7(每周7天),因此索引不会超过数组的长度。您可以在Remainder

下详细了解此运算符here

您也可以使用% dates.length

,而不是对值7进行硬编码

答案 3 :(得分:0)

你已超出dates[]的长度。当你到达&#34; Sabado&#34;时,在下一次迭代中,你必须开始指向dates[0]

答案 4 :(得分:0)

有一种简单的方法可以做到这一点: (查看https://jsfiddle.net/ujvwckcu/

var dd = new Date();
var nn = dd.getDay();
var days = ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"];

// Array of all days from the current one till the end of the week
var ordered = days.slice(nn, 7);

// Array of all days before current one
var rest = days.slice(0, nn);

// Merge all days before to the days after array (will append at the end)
rest.forEach(function (value) {
    ordered.push(value);
})

console.log('ordered', ordered);

答案 5 :(得分:-1)

或保持简单

File> Settings...> Appearance & Behavior> System Settings> HTTP Proxy