1

私は Firefox 3.5.7 を使用しており、Firebug 内で array.reduceRight 関数をテストしようとしています。単純な配列では機能しますが、そのようなことを試みるとNaNが得られます。なんで?

>>> var details = [{score : 1}, {score: 2}, {score: 3}];
>>> details
[Object score=1, Object score=2, Object score=3]
>>> details.reduceRight(function(x, y) {return x.score + y.score;}, 0)
NaN

map も試してみましたが、少なくとも各要素の .score コンポーネントを確認できます:

>>> details.map(function(x) {console.log (x.score);})
1
2
3
[undefined, undefined, undefined]

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRightのドキュメントを読みましたが、詳細配列のすべてのスコア値を合計することができないようです。なんで?

4

3 に答える 3

7

関数に与えられる最初の引数は累積値です。したがって、関数の最初の呼び出しはのようになりますf(0, {score: 1})。したがって、x.scoreを実行すると、実際には0.scoreを実行しますが、これはもちろん機能しません。言い換えれば、あなたは欲しいですx + y.score

于 2010-01-22T15:14:39.830 に答える
4

これを試してください(副作用として数値に変換されます)

details.reduceRight(function(previousValue, currentValue, index, array) {
  return previousValue + currentValue.score;
}, 0)

またはこれ

details.reduceRight(function(previousValue, currentValue, index, array) {
  var ret = { 'score' : previousValue.score + currentValue.score} ;
  return ret;
}, { 'score' : 0 })

{ 'score' : 0 }パラメータとしてどのように必要であったかを指摘してくれた@sepp2kに感謝します。

于 2010-01-22T15:11:20.460 に答える
0

reduce 関数は、プロパティ「score」を持つ 2 つのオブジェクトを結合して、プロパティ「score」を持つ新しいオブジェクトにする必要があります。それらを組み合わせて数字にしています。

于 2010-01-22T15:12:58.720 に答える