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
相关产品推荐
相关产品推荐

