在 Javascript/JQuery 中提取多维数组

Extracting multi-dimentsional arrays in Javascript/JQuery

我正在从 SQL 源中提取一些数据,我可以将这些数据作为一个简单的数组(按日期分组显示)进入 javascript 脚本,其中包含周号、任务编号和花费的时间:

mydata = [

  // weekno, taskno, hours

  ["2014-14",160,37.5],

  ["2014-15",160,30],
  ["2014-15",243,7.5],

  ["2014-16",160,37.5],

  ["2014-17",0,7.5],
  ["2014-17",3,7.5],
  ["2014-17",321,22.5],

  ["2014-18",0,7.5],
  ["2014-18",321,30],

  ["2014-19",3,7.5],
  ["2014-19",295,30]
];

我将使用 HighCharts 绘制图表,我需要将它分成两个 属性 数组,如下所示:

properties = {
  categories: [ "2014-14","2014-15","2014-16","2014-17","2014-18","2014-19"],

  series: [
    //      Task           Week
    //      No             14    15    16    17    18    19
    //
    { name: '0',   data: [ 0,    0,    0,    7.5,  7.5,  0   ] },
    { name: '3',   data: [ 0,    0,    0,    7.5,  0,    7.5 ] },
    { name: '160', data: [ 37.5, 30,   37.5, 0,    0,    0   ] },
    { name: '243', data: [ 0,    7.5,  0,    0,    0,    0   ] },
    { name: '295', data: [ 0,    0,    0,    0,    0,    30  ] },
    { name: '321', data: [ 0,    0,    0,    22.5, 30,   0   ] }
  ]
}  

除了循环之外,我是否缺少一些简洁、惯用的方法来执行此操作?

如果它对任何人都有用,这里有一个拼凑的解决方案:

function onlyUnique(value, index, self) {
    return self.indexOf(value) === index;
}
var categories = [];
var subcategories = [];
var temp = {};
for (var i = 0; i < myChartData.length; i++) {
    key = myChartData[i][0];
    taskno = myChartData[i][1];
    hours = myChartData[i][2];
    if (taskno in temp == false) temp[taskno] = {};
    if (key in temp[taskno] == false) temp[taskno][key] = 0;
    temp[taskno][key] += hours;
    categories.push(myChartData[i][0]);
    subcategories.push(myChartData[i][1])
}
var uniqueCategories = categories.filter(onlyUnique).sort();
var uniqueSubcategories = subcategories.filter(onlyUnique).sort(function(a, b) {
    return a - b
});

var series = [];

for (var i = 0; i < uniqueSubcategories.length; i++) {
    subcatKey = uniqueSubcategories[i];
    series[i] =  { name: 'Task ' + subcatKey,   data: [] };
    for (var j = 0; j < uniqueCategories.length; j++) {
        catKey = uniqueCategories[j];
        series[i]['data'].push(temp[subcatKey][catKey] ? temp[subcatKey][catKey] : 0);
    }
}

其中 seriesuniqueCategories 是必需的数据。