2017-10-06 83 views
0

爲什麼在刪除存儲對象的最後一個元素之前,此代碼數已經減少? 這樣,它會不會刪除倒數第二個元素而不是最後一個?爲什麼在這個代碼計數已經減少?

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刪除該數組中的最後一個元素,並返回該元件。

0

因爲該陣列被0索引,所述第一元件被存儲在第0索引處,在第1'索引等

+0

所以,這就是爲什麼count已經初始化爲零,以便它可以抵消這種影響。 –