未捕获的TypeError:.unshift不是函数

时间:2018-04-13 10:00:36

标签: javascript jquery arrays

我有一段非常微不足道的代码让我陷入困境。

使用下面这段代码,我试图在数组的开头添加一个值,即当前第一个值减去100。

var slideHeights = null;
// ... other stuff, nothing is done to slideHeights
function updateHeights() {
    slideHeights = $('*[data-anchor]').map(function(i, item) {
        return Math.floor($(item).offset().top);
    }); // [2026, 2975, 3924, 4873, 5822, 6771, 7720, 8669, 9618]
    slideHeights.unshift(slideHeights[0] - 100);
    slideHeights.push(slideHeights[9] + 100);
}

我收到了错误

  

未捕获的TypeError:slideHeights.unshift不是函数

如果我评论.unshift并更正.push中的索引,则所有工作都正常,并正确添加第9个元素。

我甚至尝试将价值分开,但没有运气:

var x = slideHeights[0] - 100;
slideHeights.unshift(x);

我真的很难过,这一定是一个我看不到的微不足道的问题。

有什么想法吗? 提前感谢您的回复。 祝你今天愉快! :)

2 个答案:

答案 0 :(得分:5)

jquery的map不返回原生数组,您需要使用get()

slideHeights = $('*[data-anchor]').map(function(i, item) {
    return Math.floor($(item).offset().top);
}).get(); 

或使用toArray

slideHeights = $('*[data-anchor]').map(function(i, item) {
    return Math.floor($(item).offset().top);
}).toArray(); 

答案 1 :(得分:0)

如果是JavaScript新手出现此错误,请确保您的拼写正确。

Array.unshift()不遵循camelCase。

因此它将是Array.unshift()而不是Array.unShift()