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

标签 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!!!
}

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/

相关文章:

javascript - 当将参数传递给回调函数时与回调的调用者发生冲突时该怎么办

javascript - 从 ember.js 中的 Controller 检索计算属性

PHP在Wordpress中自动编码&

java - 如何从 HashMap 中检索值

python - 检查第一个列表中的双元素是否出现在第二个列表中并打印输出

list - TCL:循环如何从最内层循环到外部?

c - 检测到 glibc - 双重释放或损坏

objective-c - 内存管理

java - 使用 akka 流将数据分块写入文件

javascript - 如何防止表单提交默认?