使用多维数组创建多维对象

我试图建立一个有点先进的“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]] } }; 

从我的代码隐藏我生成了一些看起来像这样的列表(不是相同的数据,但不介意):

 
  • 02:10
  • 05:25
  • 09:21
  • 00:00
  • 00:00
  • 19:51
  • 18:35
  • 14:39
  • 07:46
  • 10:26

“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不起作用(请参阅点和括号表示法 )。 试试这个:

 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对象,但这取决于你的输入和输出格式。

改变var objects = []; to var objects = {}; 并改变

 objects.push({ categoryName: { label: categoryName, data: array} }); 

 objects[categoryName] = { label: categoryName, data: array}; 

使用JSON对象时遇到的问题是使用变量索引设置属性。 如上所述,Yuo可以使用数组表示法来做到这一点。

尝试

  var data = {}; $('div#Container ul').each(function() { var sub_obj = data[$(this).attr('id').toLowerCase()] = { label: $(this).attr('id').toUpperCase(), data: [] }; $(this).children('li').each(function() { sub_obj.data.push([$(this).data('key'), $(this).text()]); }); }); console.log(data); 

试试这个:

 var datasets = {}; $('ul').each(function (i, v) { catName = $(this).attr('id'); datasets[catName] = { label : catName, data: [] }; $('li', this).each(function () { datasets[catName].data.push([new Date($(this).data('key')).getTime(), $(this).text()]); }) }); 

演示: http : //jsfiddle.net/nfsYu/6/

 function convertObject(obj, key) { let returnObje = {}; if (!key) key = ""; else key = key + "_"; Object.keys(obj).forEach(function (k1) { if (obj[k1] != null && typeof obj[k1] == "object") { returnObje = Object.assign({}, returnObje, convertObject(obj[k1], key + k1)) } else returnObje[key + k1] = obj[k1]; }); return returnObje; } var hotels = { "hilton": {"name": "hilton hotel" }, "newton": {"name": "newton hotel"} }; convertObject(hotels);