JS源码--数组中unshift()方法的实现

103 阅读1分钟

在js数据结构与算法的学习中,我遇到了第一个挑战,如何在数组的开头去添加新的元素.

最开始我是将所有的元素都向后移一位,最后将准备添加的元素放在开头

Array.prototype.insertFirstPosition = function (value) {
    for (let i = this.length; i >= 0; i--) {
        this[i] = this[i - 1]
    }
    this[0] = value
}
let nums = [1, 2, 3]
nums.insertFirstPosition(0)
console.log(nums)  // [0, 1, 2, 3]

很快我就认识到了一个新的问题,如果我想要添加多个元素该怎么办?于是我想到了js中的一个方法,没错,就是unshift()

但是,只是使用js内置的方法我觉得很不过瘾,我想要通过代码去实现unshift()方法的效果,于是:

let nums = [1, 2, 3, 4, 5, 6]
//构建一个数组对象的方法
Array.prototype.insertFirstPosition = function (...value) {
  console.log(value);
  for (let i = this.length + arguments.length - 1; i > arguments.length - 1; i--) {
    this[i] = this[i - arguments.length]
  }
  for (let i = 0; i < arguments.length; i++) {
    this[i] = arguments[i]
  }
}
nums.insertFirstPosition(0, 10)
console.log(nums); // [0,10,1,2,3,4,5,6]

这里我使用的是arguments去获取一些关键信息,比如传入参数的长度,以及传入参数的元素.

es6为我们提供了剩余参数这个东西,实际上你用value去替换代码中的arguments也是一样的效果.

以上内容是我在汪图南的js的数据结构与算法中和另一位老哥的文章中学习到的,有兴趣可以去看看原文.

JavaScript数据结构和算法 | 汪图南 (wangtunan.github.io)

js源码-数组中的push()和unshift()方法的源码实现 - KG-work-space - 博客园 (cnblogs.com)