如何在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]
代码逻辑解释
- 记录长度参数:先保存原数组长度和新元素的数量,确定原元素需要后移的位数。
- 后移原数组元素:从原数组最后一个元素开始向前遍历,把每个元素的索引加上新元素的数量。如果从前往后移动,会提前覆盖未处理的元素,导致数据丢失。
- 插入新元素:将新元素依次赋值到数组的前
newValLen个位置(从索引0开始)。 - 返回新长度:和原生
unshift方法行为一致,返回数组更新后的长度。
与你实现的push版本对比
你之前写的push版本是直接往数组末尾追加元素,逻辑简单;而模拟unshift的核心差异在于需要先处理原元素的后移操作,才能腾出头部位置插入新元素。
内容的提问来源于stack exchange,提问作者Ahmed Mahrous
相关产品推荐
相关产品推荐

