认真对待数据结构

Abiee,

我在互联网上搜索 “JavaScript 数据结构与算法”时,浏览过不少随意介绍数据结构的内容。比如一个队列:const queue = [],入队 queue.push(value),出队 const value = queue.shift()。这俨然是一种轻浮。

我们可以理所当然地用数组去构建队列,上述例子也没有功能错误,但我要提出两点糟粕:语义与阅读、IDE 提示。在语义与阅读上,我们构建出来的数据依然是数组,它可以使用数组本就存在的任意方法,push 和 shift 只是恰巧满足需要。IDE 的编码提示也是如此,它会从上下文得知,我们在操作数组。

请各位回过头来再读这句短语“数据结构与算法”,我们是在跟数据结构打交道,数组或队列都是数据结构中的一种,队列同样值得认真对待,每一种数据结构都应该认真对待。在 JavaScript 中,数组有一种创建方式是使用构造器,所以,我们也为队列编写一个类,以下是我的参考代码:

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

  enqueue(value) {
    this.items.unshift(value);
  }

  dequeue() {
    return this.items.pop();
  }

  clear() {
    this.items = []
  }

  toArray() {
    return this.items.slice();
  }

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

  size() {
    return this.items.length;
  }
}