为什么此代码计数已减少?

时间:2017-10-06 13:00:22

标签: javascript data-structures stack

为什么在删除存储对象的最后一个元素之前,此代码计数首先递减? 这样,它不会删除倒数第二个元素而不是最后一个元素吗?

var stack = function () {
  this.count = 0;
  this.storage = {};
  this.push = function (value) {
    this.storage[this.count] = value;
    this.count++;
  }
  this.pop = function () {
    if (this.count === 0) {
      return undefined;
    }
    else {
      this.count--;
      var result = this.storage[this.count];
      delete this.storage[this.count];
      return result;
    }
  }
}

3 个答案:

答案 0 :(得分:2)

在(大多数)编程语言中,数组从零开始。

因此,对于['foo'],计数将为1,但'foo'位于索引0

因此,数组中的最后一个元素 总是 位于索引array.length - 1

也就是说,如果你使this.storage成为数组,则可以替换整个else块。

由于this.storage以任何方式充当数组,因此将其设为数组:

this.storage = [];

然后你可以使用:

else {
  this.count--;
  return this.storage.pop();
}

Array.prototype.pop从数组中删除最后一个元素,并返回所述元素。

答案 1 :(得分:0)

因为数组是0索引,第一个元素存储在第0个索引,第2个元素存储在第1个索引,依此类推

答案 2 :(得分:0)

计数等于数据结构中第一个空闲位置的索引,然后添加发生在当前计数之后递增,并且通过对称性递减之前指向被释放的最后一个元素,从而计数指向最后一个释放的位置。