为什么在删除存储对象的最后一个元素之前,此代码计数首先递减? 这样,它不会删除倒数第二个元素而不是最后一个元素吗?
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;
}
}
}
答案 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)
计数等于数据结构中第一个空闲位置的索引,然后添加发生在当前计数之后递增,并且通过对称性递减之前指向被释放的最后一个元素,从而计数指向最后一个释放的位置。