如何在JavaScript中迭代此List类的实例

时间:2015-02-01 06:00:37

标签: javascript list memory-management data-structures memory-leaks

我试图通过以下方式迭代列表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!!!
}
  

我正在获得一个无限循环,其中包含一个不变的列表索引。什么   可能会出错?

假设列表已使用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;
  },

};

1 个答案:

答案 0 :(得分:1)

您的next()函数不会使this.position值增加this.listSize - 1,因此for循环的条件部分将始终评估为true,因为您的{ {1}}始终小于currentPosition()

例如,您的length()中包含1个元素。这是for循环值:

List

致电names.top() = 0 names.currentPosition() = 0 names.length() = 1 支票names.next()。这可以重写:this.position < this.listSize - 1。所以接下来不会增加0 < (1 - 1)并且你的for循环无限运行。