【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]