2013-03-13 35 views
1

我正在嘗試製作一些圖表評分,我需要從一組作業中計算點數。如何基於包含所有信息的對象數組來繪製等級?

OK,我已經是一個這樣的數組:

[{ 
    category: "assignment", 
    date: 2/13/13, 
    earned: 9, 
    total: 10 
}, { 
    category: "assignment", 
    date: 2/13/13, 
    earned: 8.5, 
    total: 10 
}, { 
    category: "test/quiz", 
    date: 2/7/13, 
    earned: 85, 
    total: 100 
}] 

的日期不一定是爲了並且可以有多個數據點從當天

和重量不同類別:

[{ 
    "assignment": 40, 
    "test/quiz": 60 
}] 

我所需要的是用於陣列的新的數組,以用含有的總體加權級到該點和日期的每個對象被創建。 (我知道how weighting works

所以這個輸出是:

[ // [x, y] 
    ["2/7/13", 87.5], 
    ["2/13/13", 86.0] 
] 

最好按時間順序

在那裏我感到困惑的是如何以編程方式從一開始就聯合多個任務,並將它們有機結合起來以前的數據並創建一個新的點。這只是一個簡單的例子,通常有幾個月的許多任務

我已經嘗試過,但它包含了似乎是太多循環,並且非常混亂,所以我颳了它。我在想,必須有更好的方式來做到這一點,在租用更簡單。

數據非常靈活,所以它可以以任何方式排列。恩。如果更容易,日期可以更改爲時間戳。或者可以將對象屬性命名爲不同的東西。

我可能會自己走在前面,但最終我打算將數據存儲在第一次運行,然後每隔運行只檢查數據的變化,只計算那些新的點

+0

那麼,我們可以看到你的嘗試? – 2013-03-13 08:04:08

回答

1

怎麼樣東西像this?不知道我是否完全理解,但這裏是我的去吧:

var scores = [{ 
    category: "assignment", 
    date: '2/13/13', 
    earned: 9, 
    total: 10 
}, { 
    category: "assignment", 
    date: '2/13/13', 
    earned: 8.5, 
    total: 10 
}, { 
    category: "test/quiz", 
    date: '2/7/13', 
    earned: 85, 
    total: 100 
}]; 

var weights = { 
    "assignment": 40, 
    "test/quiz": 60 
}; 

function calculateCombined() { 
    var dates = [], combined = []; 
    for (var i = 0; i < scores.length; i++) { 
     if (!dates[scores[i].date]) { 
      dates[scores[i].date] = []; 
     } 

     dates[scores[i].date].push({ 
      weight: weights[scores[i].category] || 1, 
      percentage: (scores[i].earned/scores[i].total) * 100 
     }); 
    } 

    for (var x in dates) { 
     if (dates.hasOwnProperty(x)) { 
      var tWeight = 0; 
      dates[x].forEach(function(dVal) { 
       tWeight += (dVal.weight/100) * dVal.percentage 
      }); 

      combined.push({ 
       date: x, 
       wight: tWeight 
      }); 
     } 
    } 

    return combined.sort(function(d, e) { 
     return new Date(d.date) - new Date(e.date); 
    }); 
} 

console.log(calculateCombined()); 
+0

非常感謝,我還沒有機會用我的其他代碼測試它,但它看起來太棒了! – janka102 2013-03-14 05:37:45

+0

很高興幫助! – epoch 2013-03-14 06:16:33

相關問題