2016-07-26 6 views
3

マップ& reduceを使用して、ページ内のいくつかの要素の高さの合計を計算しようとしています。有効な配列を返すの.map

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

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

:理由は不明であるが、これは私に次の例外がスローされ

[48, 48, 48, 75, 48] 

私は(別途マップをすれば[48、48、48、 75、48] .reduce(...))それは動作します。 ここで何が間違っていますか?

+7

のようなものは、() '' map'と 'reduce'間'に.getを追加します

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

で見つけることができます。それ以外の場合は、配列を含むjQueryオブジェクトがあります。 –

+0

ここで '.items'の小さなサンプルをここに投稿できますか? – webdeb

+0

これは、['.map'](http://api.jquery.com/map/)メソッドは配列ではなく** jQueryオブジェクト**を返すからです。 – hindmost

答えて

4

これは$( '。items')の構造体のような配列ですが、配列ではないためです。プロトタイプがNodeList型のdofであれば、それにreduceメソッドはありません。これをArray.fromから渡すと、適切な配列に変換され、reduce、map、および他のすべての配列関数を適用できます。

詳細は

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

何らかの理由でこの解決策が私に「0」を返しています。 .map()と.reduce()の間に.get()を追加することで修正されました。とにかく、ありがとう! –

+0

マップコールバックで引数の順序が間違っています。この解決法が機能するためには、私はmapから 'index'引数を削除する必要があります。そうでなければ、この例外が私にスローされます: "olhares.min"(これは.map(slide => $(slide).height()) ' – Thomas

+0

.js?v = 1:4 Uncaught TypeError: 'Window'で 'getComputedStyle'を実行できませんでした:パラメータ1の型が 'Element'ではありません。 " 最後に、これは次のようになります。 'Array.from($。 'コメント - アイテム。スクロール - スライドスティックアクティブ')) .map((slide)=> $(スライド)。 –

関連する問題