在js中的数组中从零递增
increment away from zero in an array in js
我有以下js脚本。它使用 alert 来计算一周中的第 0 天星期一...第 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) 未定义结果背后的逻辑是什么?我只是计数机制。 days 是数组
//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 天是星期六(如果可以的话)。
看起来它正在运行 here。
您在这里漏掉了 space:
'is ' +days[i] +'\n';
你应该切换到合适的 for
循环:
for (var i = 0; i < days.length; i++) {
message += 'Day ' + i + ' is ' + days[i] + '\n';
}
这是一个good post describing why
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);
使用 i+1 从 1 开始
使用带有索引的 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
)不会改变变量的值。
当您遍历数组对象的 numerically-indexed 属性时,通常不应使用 for ... in
循环。 JavaScript(严格来说)甚至不能保证 for ... in
的迭代序列将按任何特定顺序排列。
我有以下js脚本。它使用 alert 来计算一周中的第 0 天星期一...第 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) 未定义结果背后的逻辑是什么?我只是计数机制。 days 是数组
//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 天是星期六(如果可以的话)。
看起来它正在运行 here。
您在这里漏掉了 space:
'is ' +days[i] +'\n';
你应该切换到合适的 for
循环:
for (var i = 0; i < days.length; i++) {
message += 'Day ' + i + ' is ' + days[i] + '\n';
}
这是一个good post describing why
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);
使用 i+1 从 1 开始
使用带有索引的 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
)不会改变变量的值。
当您遍历数组对象的 numerically-indexed 属性时,通常不应使用 for ... in
循环。 JavaScript(严格来说)甚至不能保证 for ... in
的迭代序列将按任何特定顺序排列。