2016-03-10 37 views
-2

我有以下代碼減少功能不能提供所期望總和

var result_goals_against = []; 
memo_goals.reduce(function(res, value) { 
    if (!res[value.player_id]) { 
    res[value.player_id] = { 
     goals_against: 0, 
     player_id: value.player_id 
    }; 
    result_goals_against.push(res[value.player_id]) 
    } 
    res[value.player_id].goals_against += value.goals_against; 
    return res; 
}, {}); 

這是輸出:

Most results are NaN and some have undefined appended a couple of times

我的關注:row的實際值應爲(1.row = 10),(6.row = 2)和(其餘爲0),腳本應該總結,但它似乎只是鏈接值。我試圖將+= value.goals_against;修改爲+= +value.goals_against;,因爲我在mongodb中的值是字符串而不是數字。

樣品備忘錄數據陣列

memo_goals = 
[ 
{ 
     "_id" : "Qzg3P8RGakoT3WvRC", 
     "match_id" : "f3YWd2WKKz9dCW4CH", 
     "team_id" : "2PKzW3Yb27vMqfDYh", 
     "player_number" : "7", 
     "player_id" : "8KnyCJ3KiqBYmAQ26", 
     "saves" : "12", 
     "goals_against" : "2" 
}, 
{ 
     "_id" : "b39KhqCXRFDGccpdW", 
     "match_id" : "9bKWj27hF5P87Ags4", 
     "team_id" : "2PKzW3Yb27vMqfDYh", 
     "player_number" : "7", 
     "player_id" : "8KnyCJ3KiqBYmAQ26", 
     "saves" : "16" 
} 
]; 
+2

哪裏數據?我有一種感覺,你試圖在這裏使用字符串而不是數字... – melancia

+0

請顯示你的memo_goals結構和它的一個例子! – cFreed

+0

@cFreed我添加了示例數據 – justdiehard

回答

0

據我所看到的,你有2個問題:

  1. 如果value.goals_against是一個字符串(而不是數字,你說),然後將數字res[value.player_id].goals_against添加到字符串value.goals_against會給你一個字符串,而不是一個數字。在添加之前,您需要將value.goals_against解析爲數字。
  2. value.goals_against顯然在您的數據中還包含undefined值。您需要驗證該情況並在添加中將其解析爲0。

要解決2個問題上面,你可以嘗試更改行10:

res[value.player_id].goals_against += value.goals_against; 

...到:

res[value.player_id].goals_against += (parseInt(value.goals_against) || 0); 
+0

該死的好! Thx Eduard!我實際上嘗試過parseInt,因爲「+」不起作用,但我不知道要添加「|| 0」。很高興有你在這裏。我正準備讓我的應用程序變得冗長,使我無法發現新的東西:)我想我必須開始寫整數 – justdiehard

+0

很高興我能幫上忙!您可以通過將答案標記爲「已接受」來表示您的欣賞,並讓自己獲得一些理所應當的休息;) –

+0

如果您願意接受答案,我們將會非常感激;) –