在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)