删除文章

确定要删除这篇文章吗?

取消
确定

JavaScript 栈、队列

     阅读(551)  2019-03-27 06:13:43

Stack

栈,后进先出

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

    pop() {
        const t = this.top()
        this.list.pop()
        return t
    }

    push(...item) {
        this.list.push(...item)
    }

    top() {
        return this.isEmpty() ? undefined : this.list[this.size() - 1]
    }

    size() {
        return this.list.length
    }

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

Queue

队列,先进先出

class Queue {
    constructor() {
        this.list = []
    }

    dequeue() {
        const t = this.head()
        this.list.shift()
        return t
    }

    enqueue(...item) {
        this.list.push(...item)
    }

    head() {
        return this.isEmpty() ? undefined : this.list[0]
    }

    size() {
        return this.list.length
    }

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

String拼接

考虑下面的方法

str = '';
for (/* each piece */) {
  str += piece; // bad for performance!
}
return str;

此方法将导致过多的中间字符串和连接操作,并且整体执行效果不佳

解决上面问题的方法是使用join

var tmp = [];
for (/* each piece */) {
  tmp.push(piece);
}
str = tmp.join(''); // Specified an empty separator, thanks Jonathan
return str;

此方法不会受到额外字符串对象的影响,并且通常执行得更快。

文章评论

Keep it simple,stupid
文章数
326
总访问量
314857
今日访问
304
最近评论

liangzi: 不错 谢谢分享
tujiaw: registerThreadInactive:如果当前没有激活的线程,就去激活线程,让等待的线程去执行任务。
hgzzx: 佩服佩服。 请教:registerThreadInactive的作用是什么?
xuehaoyun: 很不错,来围观一下
tujiaw: 抱歉csdn code服务关闭了,这个代码我也找不到了
于淞: 你好,这个文章的源码能分享一下吗,songsong9181@163.com,谢谢了 上面的写错了
回到顶部