<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri,Arial,Helvetica,sans-serif,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;" dir="ltr">
<div>Hello,<br>
<br>
you can try using a Map with unique keys. Map operations are guaranteed to be sublinear on average, and new entries are added to the end.<br>
<br>
Then you only need a trivial wrapper for better abstraction:<br>
<br>
```js<br>
class Queue {<br>
  constructor() {<br>
    this._map = new Map();<br>
  }<br>
  push(value) {<br>
    this._map.set({}, value);<br>
  }<br>
  pop() {<br>
    var first = this._map.entries().next();<br>
    if (first.done) return;<br>
    this._map.delete(first.value[0]);<br>
    return first.value[1];<br>
  }<br>
  get size() {<br>
    return this._map.size;<br>
  }<br>
}<br>
var q = new Queue();<br>
q.push(1);<br>
q.push(2);<br>
q.pop(); // 1<br>
q.push(3);<br>
q.pop(); // 2<br>
q.pop(); // 3<br>
q.pop(); // undefined<br>
```<br>
<br>
-- Oriol<br>
</div>
<br>
</div>
</body>
</html>