当前位置: 首页 > news >正文

【JavaScript】Array的unshift的实现

#也不知道有没有人跟我一样老是混了unshift和shift,不过问题不大,这篇主要记录一下unshift底层实现与手动实现unshift效果#

底层实现逻辑

重新分配一个更大的数组,并将旧元素复制到新数组,然后在新数组上执行操作。

手动实现

创建新数组

Array.prototype.myUnshift = function () {const curLen = this.length; // 当前数组长度const argsLen = arguments.length; // 入参数量const newArray = new Array(curLen + argsLen); // 分配一个更大的数组// 把原数组的元素复制到新数组for (let i = 0; i < curLen; i++) {newArray[i + argsLen] = this[i];}// 把入参元素复制到新数组for (let i = 0; i < argsLen; i++) {newArray[i] = arguments[i];}// 更新数组长度this.length = newArray.length;// 把新数组的元素复制回原数组for (let i = 0; i < this.length; i++) {this[i] = newArray[i];}return this.length; // 返回新长度
}

原数组上修改

Array.prototype.myUnshift = function () {const len = arguments.length; // arguments 入参for (let i = len - 1; i >= 0; i--) {this.splice(0, 0, arguments[i]); // this 当前数组}return this.length; // 返回新长度
}

测试 

let arr = [1, 2, 3]
console.log(arr.myUnshift(4, 5), arr) // 5 [4, 5, 1, 2, 3]


http://www.mrgr.cn/news/49172.html

相关文章:

  • 文件和目录的权限管理
  • Kaggle竞赛——森林覆盖类型分类
  • Android开发首页底部tab切换图标有动画效果
  • Linux——DNS服务器正向解析搭建教程
  • Java中的类加载器(ClassLoader)机制是怎样的?Java中的JNI(Java Native Interface)是什么?它是如何工作的?
  • 【精选】基于javaweb的流浪动物领养系统(源码+定制+开发)
  • 查找学位论文的数据库有哪些
  • ubuntu matlab修改默认当前文件夹
  • Python知识点:基于Python技术,如何使用Apollo与Python进行自动驾驶平台开发
  • 7D性能咨询项目日记:客户要什么就要给什么,不是你会什么给什么
  • 机器学习:强化学习中的探索策略全解析
  • 【Elasticsearch系列】Elasticsearch启动失败问题
  • 特征值计算(大数据作业)
  • 苍穹外卖学习笔记(二十一)
  • 【动手学电机驱动】 TI InstaSPIN-FOC(3)Lab03a 测量电压电流漂移量
  • 5580......
  • LeetCode讲解篇之2606. 找到最大开销的子字符串
  • 攻防世界17-php_rce-CTFWeb进阶
  • 算法_校园最短路径漫游设计
  • 拆解学习【STC宏晶MCU-CM1020电池保护】(一)