You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Uncaught TypeError: .unshift is not a function报错求助:数组前置元素失败

问题排查与解决:Uncaught TypeError: .unshift is not a function

嘿,这个坑我之前也踩过!咱们一步步拆解问题:

问题根源

你代码里的slideHeights是通过$('*[data-anchor]').map(...)赋值的,但jQuery的.map()方法返回的不是原生JavaScript数组——它返回的是一个jQuery包装的类数组对象,虽然看起来和数组一样(有索引、length属性),但本质上不是真正的数组,自然没有unshift这类数组原型上的方法,调用时就会抛出TypeError。

解决方法

只需要把这个类数组对象转换成真正的原生数组就行,有两种简单的实现方式:

方式1:用jQuery的.get()方法转换

这是最常用的jQuery风格写法,在.map()后面链式调用.get()即可:

function updateHeights() {
  slideHeights = $('*[data-anchor]').map(function(i, item) {
    return Math.floor($(item).offset().top);
  }).get(); // 关键:将jQuery对象转为原生数组
  // 现在可以正常调用unshift了
  slideHeights.unshift(slideHeights[0] - 100);
  // ... 后续代码
}

方式2:用原生JS的Array.from()转换

如果你更偏好原生JavaScript写法,也可以用Array.from()完成转换:

function updateHeights() {
  slideHeights = Array.from($('*[data-anchor]').map(function(i, item) {
    return Math.floor($(item).offset().top);
  }));
  slideHeights.unshift(slideHeights[0] - 100);
  // ... 后续代码
}

效果验证

转换后slideHeights就变成了真正的数组,比如原来的[2026, 2975, 3924, ...],执行unshift后会变成[1926, 2026, 2975, ...],完全符合你在数组开头添加「首个元素减100」的需求。

内容的提问来源于stack exchange,提问作者GigiSan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:27:52