我试图建立一个有点先进的“Flot”jQuery插图.为此,我需要一个多维对象(或者至少我认为它是).
结构应如下所示:
var datasets = {
"usa": {
label: "USA",
data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
},
"russia": {
label: "Russia",
data: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]]
}
};
从我的代码隐藏中我生成了一些看起来像这样的列表(不是相同的数据,但不介意):
<ul id="MOBILISATION">
<li data-key="2012/3/27">02:10</li>
<li data-key="2012/3/28">05:25</li>
<li data-key="2012/3/29">09:21</li>
<li data-key="2012/3/30">00:00</li>
<li data-key="2012/3/31">00:00</li>
</ul>
<ul id="OPERATIONS">
<li data-key="2012/3/27">19:51</li>
<li data-key="2012/3/28">18:35</li>
<li data-key="2012/3/29">14:39</li>
<li data-key="2012/3/30">07:46</li>
<li data-key="2012/3/31">10:26</li>
</ul>
“USA / usa”是“MOBILIZATION”,“1988”是“2012/3/27”,“483994”是“02:10”.你得到图片!! ??
我试过写一些jQuery,但它显然不起作用:
var objects = [];
var array = [];
var categoryName = "";
$('div#Container ul').each(function () {
catName = $(this).attr('id');
$('li', this).each(function () {
array.push([new Date($(this).data('key')).getTime(), $(this).text()]);
});
objects.push({ categoryName: { label: categoryName, data: array} });
});
var datasets = objects;
正如你所看到的,我已经使用了push to objects数组.显然那不是我想要的结果.我是kindda在这里上下都失败了,这是我第一次使用javascript / jQuery对象.
什么是最好的解决方案?
解决方法:
您的数据集是一个对象,而不是一个数组 – 您无法推送它.此外,您的变量categoryName不起作用(在dot and bracket notation上阅读更多内容).尝试这个:
var datasets = {};
$('div#Container ul').each(function () {
catName = this.id;
var array = [];
$('li', this).each(function () {
array.push([
new Date($(this).data('key')).getTime(),
$(this).text()
]);
});
datasets[catName.toLowercase()] = {
label: catName.toUppercase(),
data: array
};
});
另外,我不确定你是否真的需要创建Date对象,但这取决于你的输入和输出格式.