Javascript 在这个代码中,为什么计数已递减?
在这个代码中,为什么在删除存储对象的最后一个元素之前先递减计数? 这样,它不会删除最后一个元素而不是最后一个元素吗Javascript 在这个代码中,为什么计数已递减?,javascript,data-structures,stack,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
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;
}
}
}
在(大多数)编程语言中,数组是基于零的
因此,对于['foo']
,计数将为1
,但'foo'
位于索引0
因此,数组中的最后一个元素将始终位于索引array.length-1
也就是说,如果您将
this.storage
设置为一个数组,则整个else
块都可以替换
由于此.storage
以任何方式充当数组,请将其设置为数组:
this.storage = [];
然后您可以使用:
else {
this.count--;
return this.storage.pop();
}
从数组中删除最后一个元素,并返回所述元素。在(大多数)编程语言中,数组是基于零的
因此,对于['foo']
,计数将为1
,但'foo'
位于索引0
因此,数组中的最后一个元素将始终位于索引array.length-1
也就是说,如果您将
this.storage
设置为一个数组,则整个else
块都可以替换
由于此.storage
以任何方式充当数组,请将其设置为数组:
this.storage = [];
然后您可以使用:
else {
this.count--;
return this.storage.pop();
}
从数组中删除最后一个元素,并返回所述元素。因为数组索引为0,所以第一个元素存储在第0个索引,第二个元素存储在第1个索引,依此类推。因为数组索引为0,所以第一个元素存储在第0个索引,第1个索引处的第2个,以此类推,计数等于数据结构中第一个空闲位置的索引,然后在当前计数处进行相加,该计数在之后递增,并且通过对称性在之前递减,以指向最后一个被释放的元素,因此,count指向最后一个释放的位置。count等于数据结构中第一个释放位置的索引,然后在当前计数处进行相加,该计数在之后递增,通过对称性在之前递减,以指向最后一个释放的元素,因此count指向最后一个释放的位置。,这就是为什么count被初始化为零,这样它就可以抵消这个效果。这就是为什么count被初始化为零,这样它就可以抵消这个效果。