我们知道,在JS中,删除数组元素有两种方式:pop和shift,分别可以删除尾元素和首元素。但是,同样是删除元素,它们的执行时间确实不同。当数组项较多时,shift的执行时间明显长于pop。consttest=(arrLength)=>{letarr1=[]console.time(`${arrLength}-arr1`)for(leti=0;i{returnarr.push(...arg)-offset}//删除元素,返回删除的元素constshift=()=>{constres=arr[offset]//删除元素到bereturn//Falsedeletearr[offset]=undefinedoffset++//为避免数组无限膨胀,周期性一次性删除前面的空元素if(offset>arr.length/2){arr.splice(0,offset)offset=0}returnres}//通过Proxy拦截队列操作constp=newProxy({},{get(target,prop){switch(prop){case'push':{returnpush}case'shift':{returnshift}case'length':{//队列长度=数组的实际长度-偏移量returnarr.length-偏移量}default:{//元素真实索引=要访问的索引+偏移量returnarr[Number(prop)+offset]}}},})返回p}constqueue=createQueue()console.log(queue.push(0,1,2,3,4))//5console.log(queue[0])//0console.log(queue.length)//5console.log(queue.shift())//0console.log(queue[0])//1console.log(queue.length)//4console.log(queue.shift())//1console.log(queue.push(5))//4console.log(queue[0])//2console.log(queue[queue.length-1])//5测试性能执行10/100/1000万次增删操作,测试队列性能consttest=(arrLength)=>{letarr1=[]console.time(`${arrLength}-arr1`)for(leti=0;i