未捕获的类型错误:.unshift不是一个函数。

3

我有一段非常琐碎的代码,却让我卡住了。

以下是我的代码。我想将一个值添加到数组的开头,这个值应该是当前第一个值减去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);
}

我收到了以下错误:

Uncaught TypeError: slideHeights.unshift 不是一个函数

如果我注释掉 .unshift 并在 .push 中更正索引,一切都可以正常工作,并且第9个元素被正确添加。

我甚至尝试分离值,但是没有成功:

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

我真的被卡住了,这一定是我没有看到的一个微不足道的问题。

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

2个回答

6

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(); 

非常感谢您提供的解决方案。:) 不过我想知道为什么 .push() 能够起作用? - GigiSan
如果你遇到了这个错误 Uncaught TypeError: slideHeights.unshift is not a function,那我怀疑下一行的 push 是否工作正常。因为在抛出这个错误后,下一行的代码首先不会执行。 - gurvinder372
我已经注释掉了 .unshift 并且在 .push 中减少了索引,现在它可以正常工作。请查看 - GigiSan
@GigiSan 是的,我也很惊讶。在 jQuery 的文档中根本没有提到支持 push。http://api.jquery.com/?s=push - gurvinder372

1
如果有新手在使用JavaScript时遇到这个错误,请确保你的拼写正确。

Array.unshift() 不是驼峰式命名。

因此应该使用 Array.unshift() 而不是 Array.unShift()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接