如何不使用除length外的数组方法移除数组的第一个元素
你之前使用delete的方案只会删除指定索引的元素值,不会触发数组元素的重排,因此会在头部留下undefined空位,不符合出队操作的要求。下面是符合限制条件的实现方案:
实现思路
出队(dequeue)操作要求移除数组首个元素,剩余元素自动向前补位,同时返回被移除的元素。由于限制只能使用数组的.length属性,不能调用其他数组API,我们可以通过手动遍历移位+修改数组长度的方式实现。
实现代码
function dequeue(arr) { // 空数组直接返回undefined if (arr.length === 0) return undefined // 缓存要出队的第一个元素 const removedItem = arr[0] // 所有元素向前移动一位 for (let i = 0; i < arr.length - 1; i++) { arr[i] = arr[i + 1] } // 截断最后一位冗余元素 arr.length = arr.length - 1 // 返回被移除的元素 return removedItem } // 测试示例 let arr = [1, 2, 3] console.log(dequeue(arr)) // 输出 1 console.log(arr) // 输出 [2, 3]
逻辑说明
- 空数组判断避免无效遍历,符合队列空时出队返回undefined的常规逻辑
- 遍历终止条件设置为
i < arr.length - 1,因为最后一位元素不需要向前赋值,后续会通过截断长度直接移除 - 直接修改
.length属性是允许的操作,不需要调用其他数组方法,JS会自动处理数组截断逻辑
内容的提问来源于stack exchange,提问作者Weed Smith
相关产品推荐
相关产品推荐

