2017-10-06 1 views
0

なぜこのコードでは、ストレージオブジェクトの最後の要素を削除する前に、カウントが最初に減ったのですか? このようにして、lastの代わりに2番目の最後の要素を削除しませんか?なぜこのコードのカウントが減ったのですか?

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

にCountはデータの最初の自由な位置のインデックスに等しくされます構造体では、後にインクリメントされる現在のカウントで加算が行われ、解放された場所の最後の要素を指すように対称で減分されます。したがって、最後の解放された位置を指します。

2

(ほとんどの)プログラミング言語では、配列はゼロベースです。

したがって、['foo']の場合、カウントはですが、'foo'のインデックスは0です。

ので、配列の最後の要素は、は常にインデックスarray.length - 1になります。

あなたが this.storage配列を作る場合、全体 elseブロックを交換することができ、言っ

。配列としてthis.storage行為どのような方法は、それを配列を作るので

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

Array.prototype.popは配列から最後の要素を削除し、戻り要素言った:

this.storage = []; 

は、次に、あなたが使用することができます。

0

アレイが0インデックスされるので、最初の要素は、0番目のインデックスに格納された第1 'のインデックスで2等

+0

これはカウントがゼロに初期化されているため、この効果を中和できる理由です。 –

関連する問題