2017-10-06 1 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 데이터의 첫 번째 자유 위치의 인덱스에 해당 구조체가 추가되면, 그 후에 증분되는 현재 카운트에서 추가가 발생하고 대칭에 의해 해방 된 마지막 요소를 가리 키기 전에 대칭에 의해 감소되어 마지막으로 해제 된 위치를 가리 킵니다.

2

대부분의 프로그래밍 언어에서 배열은 0부터 시작합니다.

따라서 ['foo']의 경우 카운트는 1이지만 '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'th 인덱스에 저장되고 인덱스에 1'st 등

+0

그래서이 수를 0으로 초기화하여이 효과를 중화시킬 수 있습니다. –

관련 문제