JavaScript数组unshift()方法详解与性能优化
本文详解JavaScript中unshift()方法向数组头部添加元素的用法,并深入分析其性能瓶颈。通过对比手写unshift、push结合reverse以及直接unshift三种实现方式,展示在大规模数据操作下,利用push添加元素后reverse反转数组可显著提升执行效率,为前端开发提供实用的性能优化建议。
JavaScript数组中如何使用unshift()方法
该方法用于将新元素插入到数组的起始位置
示例
具体操作是将新项添加到数组的起始位置
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon","Pineapple");执行后,fruits数组的内容将输出为:
Lemon,Pineapple,Banana,Orange,Apple,Mango定义与用法
unshift()方法允许向数组开头添加一个或多个元素,并返回数组的新长度
需要注意的是,该方法会直接修改原数组的长度和结构
提示:若需将新元素添加到数组末尾,建议使用push()方法
JavaScript中unshift方法的性能分析
js的unshift()方法能够向数组头部添加元素并返回新的数组长度,下面我们来手动实现一个unshift()方法
Array.prototype._unshift = function () {
let arr = this
let oldLen = this.length
let argLen = arguments.length
let newLen = oldLen + argLen
for (let i = oldLen - 1; i >= 0; i--) {
arr[i + argLen] = arr[i]
}
for (let i = 0; i < argLen; i++) {
arr[i] = arguments[i]
}
return newLen
}
let arr1 = [1, 3, 4, 5, 6]
console.log(arr1._unshift(7, 8, 1),arr1); // 8, [7, 8, 1, 1, 3, 4, 5, 6]从上述代码逻辑可以看出,该实现先将原有元素向后移动,再插入新元素,因此在数组长度较大的情况下,这种操作的性能表现较差
然而,我们可以采用先执行push()添加元素,再调用reverse()反转数组的策略,这样效率会更高
接下来我们手动实现push和reverse方法来进行对比测试
Array.prototype._push = function () {
let arr = this
let len = arguments.length
for(let i = 0; i < len; i++) {
this[this.length] = arguments[i]
}
return this.length
}
let arr = [2, 54, 65, 3, 4]Array.prototype._reverse = function () {
let arr = this
let j = arr.length - 1
for(let i = 0; i < j; i++,j--) {
let curLeft = arr[i]
let curRight = arr[j]
arr[i] = curRight
arr[j] = curLeft
}
return arr
}可以看出reverse和push的时间复杂度要低。实际对比下
let arr = []
console.time('time1')
for(let i = 0 ;i< 10000; i++) {
arr.unshift(i)
}
console.timeEnd('time1') // 平均耗时 5ms let arr = []
console.time('time2')
for(let j = 0 ;j< 10000; j++) {
arr.push(j)
}
arr.reverse()
console.timeEnd('time2') // 平均耗时 0.47ms归纳
以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站
JS 鼠标滚轮事件频繁触发导致卡顿怎么优化?
2026-11-05 17:08:07
优化JS回到顶部性能:防抖节流与requestAnimationFrame应用
2026-11-05 16:33:51
JS中Array、Set与Map的区别及应用场景选择
2026-11-05 16:03:02
PixiJS 常见报错排查:纹理跨域、黑屏与内存泄漏解决
2026-11-05 10:05:21
JS数组find与filter取值区别及性能对比
2026-11-05 08:39:21
