Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据包含所有信息的对象数组绘制等级图?_Javascript_Google Chrome_Date Arithmetic - Fatal编程技术网

Javascript 如何根据包含所有信息的对象数组绘制等级图?

Javascript 如何根据包含所有信息的对象数组绘制等级图?,javascript,google-chrome,date-arithmetic,Javascript,Google Chrome,Date Arithmetic,我正在尝试制作一些图表来评分,我需要从一系列作业中计算分数 好的,我有一个这样的数组: [{ 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/

我正在尝试制作一些图表来评分,我需要从一系列作业中计算分数

好的,我有一个这样的数组:

[{
    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]
]
最好按时间顺序

我感到困惑的是如何以编程方式合并一天中的多个作业,并将它们与以前的数据合并并创建一个新点。这只是一个简单的例子,通常在几个月的时间里有很多很多的作业

我试过了,但它似乎包含了太多的循环,非常混乱,所以我把它擦掉了。我在想,一定有更好的方法可以做到这一点,至少要简单一点

数据非常灵活,因此可以以任何方式进行排列。如果方便的话,日期可以改成时间戳。或者对象属性可以命名为其他名称

我可能会超越自己,但最终我会在第一次运行时存储数据,然后每隔一次运行时只检查数据的变化,只计算那些新的点,比如?不确定我是否完全理解,但我的做法是:

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());
var分数=[{
类别:“任务”,
日期:2013年2月13日,
收入:9,
总数:10
}, {
类别:“任务”,
日期:2013年2月13日,
收入:8.5,
总数:10
}, {
类别:“测试/测验”,
日期:“2013年2月7日”,
收入:85,
总数:100
}];
变量权重={
“任务”:40,
“测试/测验”:60
};
函数calculateCombined(){
var日期=[],组合=[];
对于(变量i=0;i
像这样的东西怎么样?不确定我是否完全理解,但我的做法是:

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());
var分数=[{
类别:“任务”,
日期:2013年2月13日,
收入:9,
总数:10
}, {
类别:“任务”,
日期:2013年2月13日,
收入:8.5,
总数:10
}, {
类别:“测试/测验”,
日期:“2013年2月7日”,
收入:85,
总数:100
}];
变量权重={
“任务”:40,
“测试/测验”:60
};
函数calculateCombined(){
var日期=[],组合=[];
对于(变量i=0;i
好的,我们可以看到您的尝试吗?好的,我们可以看到您的尝试吗?非常感谢,我还没有机会用我的其余代码测试它,但它看起来很棒!非常感谢,我还没有机会用剩下的代码测试它,但它看起来很棒!