在js中的数组中从零开始递增

时间:2016-01-21 23:16:08

标签: javascript arrays alert increment

我有以下js脚本。它使用警报来计算星期一...星期六第6天的星期几。我从0开始,因为这是js。

<script>
var days = ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'];
var message = "";
for (i in days){ message += 'Day ' + i +'is ' +days[i] +'\n';}
alert(message);
</script>

我正在尝试编辑i,以便从1开始计算。

在我的for ... in循环中,当我增加i(i ++)时,我得到的第6天是未定义的(星期六)。当我减少i(i--)时,我得到的第0天是未定义的。

我的问题是

1)未定义结果背后的逻辑是什么?我只是计数机制。天是数组

 //incremented i
 for (i in days){ message += 'Day ' + I++ +'is ' +days[i] +'\n';}

 //decremented I
 for (i in days){ message += 'Day ' + I-- +'is ' +days[i] +'\n';}

2)我应该如何编写这个脚本让它读取第1天是太阳...第7天是星期六(如果可以的话)。

3 个答案:

答案 0 :(得分:4)

使用带有索引的for循环:

for (var i = 0; i < days.length; ++i)
  message += 'Day ' + (i + 1) +' is ' + days[i] +'\n';

或使用.forEach

days.forEach(function(day, dayNumber) {
  message += 'Day ' + (dayNumber + 1) +' is ' + day +'\n';
});

您的代码正在使用++--运算符,这些运算符实际上会更改i的值。这些运营商旨在用于此目的。这就是为什么您获得undefined值的原因,因为随后对days[i]的引用可以在(-1)之前或之后(7)数组的开头或结尾。子表达式i + 1(或.forEach()版本中的dayNumber + 1)确实更改变量的值。

当您遍历数组对象的数字索引属性时,通常不应使用for ... in循环。 JavaScript(严格来说)甚至不能保证for ... in的迭代序列具有任何特定的顺序。

答案 1 :(得分:1)

看起来它正在工作here

你在这里错过了一个空间: 'is ' +days[i] +'\n';

您应该切换到正确的for循环:

for (var i = 0; i < days.length; i++) {
  message += 'Day ' + i + ' is ' + days[i] + '\n';
}

这是good post describing why

答案 2 :(得分:0)

&#13;
&#13;
    var days = ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'];
    var message = "";
    for (i in days){ message += 'Day ' + (parseInt(i)+1) +' is ' +days[i] +'\n';}
    alert(message);
&#13;
&#13;
&#13;

使用i + 1从1开始