什么是队列?

队列是一种遵循先进先出原则的有序集合,添加新元素的一端称为队尾,另一端称为队首。

image.png

实现功能

JavaScript 中没有队列,但是可以通过 Array 实现队列的所有功能

  • enqueue () 入队
  • dequeue () 出队
  • top () 获取队首值
  • size () 获取队列的元素个数
  • clear () 清空队列

应用场景

  • JavaScript 异步任务中的任务队列
  • 计算最近请求次数

案例

通过数组实现

  1. const queue = [];
  2. queue.push(1);
  3. queue.push(2);
  4. const item1 = queue.shift();
  5. const item2 = queue.shift();

通过类模拟实现

  1. class Queue {
  2. constructor() {
  3. this.data = {};
  4. this.count = 0;
  5. }
  6. /**
  7. * 入队
  8. */
  9. enqueue(item) {
  10. this.data[this.count++] = item;
  11. return item;
  12. }
  13. /**
  14. * 出队
  15. */
  16. dequeue() {
  17. if (this.count > 0) {
  18. const item = this.data[0];
  19. delete this.data[0];
  20. this.count--;
  21. return item;
  22. } else {
  23. return -1;
  24. }
  25. }
  26. /**
  27. * 获取队首值
  28. */
  29. top() {
  30. if (this.count > 0) {
  31. return this.data[0];
  32. } else {
  33. return -1;
  34. }
  35. }
  36. /**
  37. * 获取队列的元素个数
  38. */
  39. size() {
  40. return this.count;
  41. }
  42. /**
  43. * 清空队列
  44. */
  45. clear() {
  46. this.data = {};
  47. this.count = 0;
  48. return {};
  49. }
  50. }
  51. const queue = new Queue();
  52. queue.enqueue('a');
  53. queue.enqueue('b');