2016-07-26 67 views
3

我試圖計算頁面中幾個元素的高度之和,使用地圖& reduce。不知什麼原因,這是我扔以下異常:

VM52933:2 Uncaught TypeError: $(...).map(...).reduce is not a function(…)

$('.items') 
    .map((index,slide) => $(slide).height()) 
    .reduce((prev, next) => prev + next, 0) 

.MAP返回一個有效的數組:

[48, 48, 48, 75, 48] 

如果我做圖分開([48,48,48, 75,48] .reduce(...))它的工作原理。 我在這裏做錯了什麼?

+7

添加'獲得()''的和map''reduce'之間。否則,你有一個包含數組的jQuery對象。 –

+0

你可以在小提琴中用'.items'發表一個小例子嗎? – webdeb

+0

這是因爲['.map'](http://api.jquery.com/map/)方法返回** jQuery對象**,而不是數組。 – hindmost

回答

4

這是因爲你是當你做$('。items')它的數組結構,但不是數組。如果你看到它的原型,它的NodeType類型的廣告它沒有減少它的方法。如果你從Array.from傳遞它,那麼它會將它轉換爲適當的數組,你將能夠應用reduce,map和所有其他數組函數。

更多細節可以在

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from

發現這樣做

Array.from($('.items')) 
.map((slide) => $(slide).height()) 
.reduce((prev, next) => prev + next, 0); 
+0

出於某種原因,此解決方案返回「0」。在.map()和.reduce()之間添加.get()修復了它。不管怎麼說,多謝拉! –

+0

map-callback中的錯誤參數順序。它是'.map(slide => $(slide).height())' – Thomas

+0

爲了使這個解決方案能夠工作,我需要從map中刪除'index'參數,否則它會拋出這個異常: 「olhares.min .js?v = 1:4 Uncaught TypeError:未能在'Window'上執行'getComputedStyle':參數1不是'Element'類型。 所以最終它看​​起來像這樣: 'Array.from($('。comments-item.slick-slide.slick-active')) .map((slide)=> $(slide)。 ((prev,next)=> prev + next,0);' –