我正在尝试按以下方式迭代列表var names = new List();
:
var names = new List();
names.append('tom');
names.append('bob');
names.append('marshal');
names.append('Cartman');
names.append('Randy');
for(names.top(); names.currentPosition() < names.length(); names.next()) {
console.log(names.getElement()); // going on and on stuck at one index! infinite loop!!!
}
I am getting an infinite loop with an unchanging index of the list. What might be going wrong?
假设列表已使用 append
方法填充了值。它绝对不是空的。下面是 List 类的实现:
function List() {
this.dataStore = [];
this.listSize = 0;
this.position = 0;
}
List.prototype = {
clear: function() {
delete this.dataStore;
this.dataStore = [];
this.position = this.listSize = 0;
},
toString: function() {
return this.dataStore.join(' \n');
},
getElement: function() {
return this.dataStore[this.position];
},
append: function(el) {
this.dataStore[this.listSize++] = el;
},
top: function() {
this.position = 0;
},
bottom: function() {
this.position = this.listSize - 1;
},
prev: function() {
if(this.position > 0) {
this.position--;
}
},
next: function() {
if(this.position < this.listSize - 1) {
this.position++;
}
},
length: function() {
return this.listSize;
},
currentPosition: function() {
return this.position;
},
};
最佳答案
您的next()
函数不会增加 this.position
过去的值(value)this.listSize - 1
因此 for 循环的条件部分将始终评估为 true
自从你的currentPosition()
永远小于你的length()
.
以您的 List
为例其中有 1 个元素。这是 for 循环值:
names.top() = 0
names.currentPosition() = 0
names.length() = 1
调用names.next()
检查this.position < this.listSize - 1
。这可以重写:0 < (1 - 1)
。所以 next 不会增加 this.position
并且你的 for 循环无限运行。
关于javascript - 如何在 JavaScript 中迭代此 List 类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28259973/