2014-03-29 151 views
0

所以这一个让我难住。我需要一个HTML表格并生成一个线图,表示每月的条目数量。我目前有DataTables为我创建表,并且源数据无法修改。我将使用Flot为我生成折线图。 Flot函数需要一个数据集,如下所示。将变量转换为数组数组

预期数据集:

[ [1, 3], [2, 14], [3, 3] ] 

DataTables功能fnInitComplete我将需要生成从表中数据的上述数据集并把它传递给Flot功能。这确保了图表与要求的表格一样动态。

这是我到目前为止有:(不完全数据表功能,但并不需要这个问题的其余部分)

$(document).ready(function() { 
    // The unimportant DT part 
    var sTable = $('#sTable').dataTable({ ... }); 

    // What I currently have 
    var items=[]; // The wrapper for my dataset (array) 

    //Iterate all td's in eighth column 
    $('#sTable tbody tr td:nth-child(8)').each(function(){ 

     //convert to jsDate from MySQL timestamp 
     var dateParts = $(this).text().split("-"); 
     var jsDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2].substr(0,2)); 
     var n = jsDate.getMonth(); 
     //In my table I have March (represented as 2) five times so 
     //console.log(n); will print 2 five times. 
    }); 
}); 

这是据我不幸得到。我认为最好的办法是取n的值,并将其作为变量的名称,所以我将变量定义为2,然后我可以执行类似2++的操作。对于每个月以这种方式返回的数字,我将有一个以该数字命名的变量,它将包含它在.each函数中出现的次数。这也会将变量限制在只有几个月的地方,并且可以让我简单地创建需要传递的数据集。

我没有太多的经验与JavaScript的工作方式,所以任何帮助非常感谢。

+1

向我们展示源数据(和结果数据) - 然后专注于编写一个独立的函数来转换一个到另一个。 –

+0

不是你想要的,但可以在另一个名为[html5csv]的库中完成(https://github.com/DrPaulBrewer/html5csv)。请参阅http://jsfiddle.net/DrPaulBrewer/XaGUd/进行绘图和表演示 - 刮取表数据,用'#myTableID'之类的jQuery选择器替换'begin()'参数,然后它将抓取数据如图所示制作自己的数据。另外,您的表格将受益于标题行。 – Paul

回答

0

创建伟驰包含每个月的数组,并从零开始喜欢本作的月数:

[ [1, 0], [2, 0], ..., [12, 0] ] 

与此代码:

var items = []; 
for (var i = 1; i <= 12; i++) 
    items.push([i, 0]); 

,然后在each功能使用

items[n][1]++; 

增加月份每次发生的次数n在您的表格中。

之后,您可以使用您的items数组来创建一个flot图表。

+0

这就是我最终做的 – MattSizzle