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
}]

必要なのは、その時点までの全体的な重み付けされた成績と日付を含む各オブジェクトを使用して、配列の新しい配列を作成することです。(重み付けの仕組みを知っています)

したがって、これの出力は次のようになります。

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

できれば時系列順

私が混乱するのは、ある日の複数の割り当てをプログラムで結合し、それらを以前のデータと結合して新しいポイントを作成する方法です。これは単純な例にすぎません。通常、数か月から非常に多くの割り当てがあります。

試してみましたが、ループが多すぎると思われるものが含まれていて、非常に紛らわしいので、スクレイピングしました。これを行うには、もう少し簡単な、より良い方法があるに違いないと考えていました。

データは非常に柔軟であるため、実際にはどのような方法でも配置できます。元。それが簡単であれば、日付をタイムスタンプに変更できます。または、オブジェクトのプロパティに別の名前を付けることができます。

私は先を行っているかもしれませんが、最終的には最初の実行でデータを保存し、その後はすべての実行でデータの変更をチェックし、それらの新しいポイントのみを計算することにしました

4

1 に答える 1

1

このようなものはどうですか?私が完全に理解したかどうかはわかりませんが、ここに私の行き方があります:

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());
于 2013-03-13T08:25:33.317 に答える