根据议程,我应该得到以下结果:
Element at 1 popped-out with value 10
Element at 2 popped-out with value 20
Element at 3 popped-out with value 30
Element at 4 popped-out with value 40
Element at 5 popped-out with value 50
但是,我的产量低于产量。
Element at 1 popped-out with value 10
Element at 2 popped-out with value 20
Element at 3 popped-out with value 30
以下是我正在尝试调试的JavaScript。
var writeMessage = function(i) {
return document.write("Element at " + (i + 1) + " popped-out with value " + array.pop() + "<br />");
};
var array = [50, 40, 30, 20, 10];
for (var i = 0; i < array.length; i++) {
writeMessage(i);
}
&#13;
我正在尝试使用chrome进行调试。循环执行几乎没有造成混淆。谁能帮助我找到我做错的地方?
答案 0 :(得分:2)
pop()
从数组中删除元素。
这会缩短数组。
这会使length
的值变小。
当i
为3时,您将从阵列中删除3个元素,使其不再是< array.length
。
答案 1 :(得分:0)
您通过关闭值来缩短数组,因此每次迭代都会更改array.length。你可以循环它..
此外,在第一次迭代中,您正在播种最后一项..当i
为零时,您显示第6个索引,当i
为5时,您显示第一个索引。这是因为pop()
从数组中取出最后一项,您应该使用shift
代替将第一项从数组中删除。
var writeMessage = function(i) {
return document.write("Element at " + (i) + " popped-out with value " + array.shift() + "<br />");
};
var array = [50, 40, 30, 20, 10], i;
while (i = array.length) {
writeMessage(i);
}
或者您可以使用for循环并直接引用每个数组索引,而不是更改数组。
var writeMessage = function(i) {
return document.write("Element at " + (array.length - i) + " popped-out with value " + array[i] + "<br />");
};
var array = [50, 40, 30, 20, 10];
for (var i = 0; i < array.length; i++) {
writeMessage(i);
}
答案 2 :(得分:0)
当您致电array.pop()
时,数组大小将减少一个。
这就是为什么只打印3个数字的原因。
答案 3 :(得分:0)
这里的问题是每次弹出数组的长度变短一个并且在某个时刻(在中间),增加的索引变得大于数组的长度。
迭代看起来像这样
Initial state: array.length=5 i=0
1. if(i < array.length) pop & print (value=10)
2. array.length=4 i=1
3. if(i < array.length) pop & print (value=20)
4. array.length=3 i=2
5. if(i < array.length) pop & print (value=30)
6. array.length=2 i=3
7. if(i < array.length) <- here your iteration stops since the condition for the loop is false
答案 4 :(得分:-1)
当i
为3时,由于pop()
减小其大小,数组的长度为2,这意味着已达到for循环的端点。将长度存储在另一个变量中,您的代码就可以运行工作片段:
var writeMessage = function(i) {
return document.write("Element at " + (i + 1) + " popped-out with value " + array.pop() + "<br />");
};
var array = [50, 40, 30, 20, 10];
var l = array.length;
for (var i = 0; i < l; i++) {
writeMessage(i);
}
&#13;
答案 5 :(得分:-1)
简单的逻辑。我才发现,但很晚。 : - (
以下是逻辑:
<html>
<head>
<script type="text/javascript">
var writeMessage = function (i) {
return document.write("Element at " + (i + 1) + " popped-out with value " + array.pop() + ". Now, the array length is: " + array.length + "<br />");
};
var array = [50, 40, 30, 20, 10];
for (var i = 0; array.length > 0; i++) {
writeMessage(i);
}
</script>
</head>
<body>
</body>
</html>