Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 将数组应用于Morris.js图表_Javascript_Arrays_Morris.js - Fatal编程技术网

Javascript 将数组应用于Morris.js图表

Javascript 将数组应用于Morris.js图表,javascript,arrays,morris.js,Javascript,Arrays,Morris.js,我有一个php db调用生成的数据数组: boxData[0] = "period : 2012 W1"; boxData[1] = "1:33"; boxData[2] = "2:36"; boxData[3] = "3:23"; boxData[4] = "4:37"; 我想通过一个参数将其应用于morris条形图的数据键。如果我硬编码它,它工作。。。但我只想将区域数据滑入数据字段,就像我在ykey和label字段中使用doens一样,在数组中滑入没有问题 硬编码 Morris.Ba

我有一个php db调用生成的数据数组:

boxData[0] = "period : 2012 W1";
boxData[1] = "1:33"; 
boxData[2] = "2:36"; 
boxData[3] = "3:23"; 
boxData[4] = "4:37";
我想通过一个参数将其应用于morris条形图的数据键。如果我硬编码它,它工作。。。但我只想将区域数据滑入数据字段,就像我在ykey和label字段中使用doens一样,在数组中滑入没有问题

硬编码

Morris.Bar({
  element : 'morris-bar-chart',
  data : [{
    period : "2012 W1",
    1: 33, 
    2: 34,
    3: 35,
    4: 32
  }],
  xkey : 'period',
  ykeys : boxKey,
  labels : boxLabels,
  hideHover : 'auto',
  resize : true
});
我想要的

Morris.Bar({
  element : 'morris-bar-chart',
  data : boxData,
  xkey : 'period',
  ykeys : boxKey,
  labels : boxLabels,
  hideHover : 'auto',
  resize : true
});

我看到数据应该是一个对象数组,那么如何才能使boxData成为这样呢

您可以拥有一个对象原型

morrisBar{
element:'',
data:[],
.
.
.
}
然后,当您想要创建一个新对象时,您可以

var foo = new Object.create(morrisBar);
然后你可以做什么

foo.data =  boxData;
并以这种方式指定类的其他数据成员

我不确定我是否误解了您的问题,如果我误解了,我很抱歉。

您需要将您的boxData数组转换为对象:

for (var i = 0, l = boxData.length; i < l; i++) {
  if (i === 0) {
    boxDataObj.period = boxData[0].split(' : ')[1];
  } else {
    boxDataObj[i] = boxData[i].split(':')[1];
  }
}
然后将该对象添加到新数组中,用作Morris.js配置对象中数据键的值:

Morris.Bar({
  element : 'morris-bar-chart',
  data : [boxDataObj],
  xkey : 'period',
  ykeys : boxKey,
  labels : boxLabels,
  hideHover : 'auto',
  resize : true
});

您可以在检索后设置数据格式,如

var boxDataObj = {};

while (boxData.length > 0){
    var temp = cleanData(boxData.shift());
    boxDataObj[temp.index] = temp.value;
}

function cleanData(el) {
    var trimmed = el.split(':');
    return {
        index: trimmed[0].trim(),
        value: trimmed[1].trim()
    };
}
如果需要将值设置为int,只需parseInt


希望能有所帮助。

我试过了,在:Object{1:1:32,2:2:33,3:3:34,4:4:35,period:2012 W1}之后得到了我自己的值。。但图表显示的是在……之前的值,而不是在……之后的值,即33、34等,实际上,这是一种享受!非常感谢。事实上,我以前并不了解这个问题。
var boxDataObj = {};

while (boxData.length > 0){
    var temp = cleanData(boxData.shift());
    boxDataObj[temp.index] = temp.value;
}

function cleanData(el) {
    var trimmed = el.split(':');
    return {
        index: trimmed[0].trim(),
        value: trimmed[1].trim()
    };
}