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

如何在JavaScript中实现unshift方法?自定义add函数实现数组头部添加

实现模拟Array.unshift()的add函数

要实现能在数组头部添加元素的add函数,核心是先将原数组的元素向后移动,腾出开头位置给新元素,再把新元素插入头部,以下是具体实现:

完整实现代码

function add(arr, ...newVal) {
  const originalLen = arr.length;
  const newValLen = newVal.length;

  // 从后往前移动原数组元素,避免覆盖未处理的值
  for (let i = originalLen - 1; i >= 0; i--) {
    arr[i + newValLen] = arr[i];
  }

  // 将新元素依次插入数组头部
  for (let i = 0; i < newValLen; i++) {
    arr[i] = newVal[i];
  }

  return arr.length;
}

// 基础测试
const array = [1, 2, 3];
add(array, 0);
console.log(array); // 输出 [0, 1, 2, 3]

// 支持多元素插入测试
add(array, -2, -1);
console.log(array); // 输出 [-2, -1, 0, 1, 2, 3]

代码逻辑解释

  1. 记录长度参数:先保存原数组长度和新元素的数量,确定原元素需要后移的位数。
  2. 后移原数组元素:从原数组最后一个元素开始向前遍历,把每个元素的索引加上新元素的数量。如果从前往后移动,会提前覆盖未处理的元素,导致数据丢失。
  3. 插入新元素:将新元素依次赋值到数组的前newValLen个位置(从索引0开始)。
  4. 返回新长度:和原生unshift方法行为一致,返回数组更新后的长度。

与你实现的push版本对比

你之前写的push版本是直接往数组末尾追加元素,逻辑简单;而模拟unshift的核心差异在于需要先处理原元素的后移操作,才能腾出头部位置插入新元素。

内容的提问来源于stack exchange,提问作者Ahmed Mahrous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:55:15