You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:36:04