我的JavaScript实现堆栈中的Peek方法未定义

问题描述

我已经在JS中实现了Stack数据结构的一个版本。

这是我的代码

class Stack {
    constructor() {
        this.stack = [];
    };

    push(item) {
        return this.stack.push(item);
    };

    pop() {
        return this.stack.pop();
    };

    peek() {
        return this.stack[this.length - 1];
    };

    isEmpty() {
        return this.length === 0;
    };

    getLength() {
        return this.stack.length;
    };
}

这里所有的东西都可以正常工作,除了peek方法。返回未定义。我不确定为什么。

这就是我的使用方式。

const stack = new Stack();
console.log(` The stack contains : ${stack.getLength()} items`);
stack.push(1);
stack.push(2);
console.log(`The stack contains : ${stack.getLength()} items`);
console.log(stack.peek());

这是输出

The stack contains : 0 items
The stack contains : 2 items
undefined

解决方法

您需要使用this.stack.length而不是this.length

peek() {
    return this.stack[this.stack.length - 1]; 
};

对于所有其他对this.length的引用