2011-08-03 6 views
0
Player.prototype.d2 = function(ratingList, rdList) { 
    var tempSum = 0; 
    for (var i = 0; i < ratingList.length; i++) { 
     var tempE = this.e(ratingList[i], rdList[i]); 
     tempSum += Math.pow(this.g(rdList[1]), 2) * tempE * (1 - tempE); 
    } 
    return 1/Math.pow(q, 2) * tempSum; 
}; 

これは問題のビットのようです。配列の長さが1の場合、配列の操作はNaNを返します。

ratingList,rdListおよびoutcomeListには1つの値しか含まれていないと、すべてうまく見えます。次にstuffはNaNに設定されます。私はインデックスを-1に変更しようとしましたが、比較をratingList.length - 1に変更して、それを減らしてもforループで試してみましたが、配列に1つの値しか含まれていないと常にNaNを返すようです。

forループを削除して、Array.map()またはzipやそのような機能の構成で置き換える方法はありますか(私は確信しています。 d2機能で

You can see ALL of the code here -- it's about 60 LOC

+0

「値が1つしかない」とは、「ratingList = ["OneValue"] 'または' ratingList = "OneValue" 'を意味しますか? – Cipi

+0

ratingList = [1400] –

答えて

2

あなたはforループでこのラインを持っている:

tempSum += Math.pow(this.g(rdList[1]), 2) * tempE * (1 - tempE); 

だから、rdListは、少なくとも2つの要素ですが、bob 1つだけを持っていると仮定されます。

多分それはrdList[i]である必要がありますか?

+0

うん、そうだ。おそらくrdList [i] –

+0

がありがとう!一方、今私は愚か、笑を感じる。誰かがループを他の構造物に置き換える方法を知っていれば、まだ学問的に興味があります。 –