通过Loop将类别添加到Highcharts

时间:2016-06-14 22:37:19

标签: javascript mvvm highcharts

我尝试使用JavaScript和JSON对象为我的条形图添加类别列表作为xAxis。到目前为止,我没有成功,因为以下代码在xAxis中产生以下内容:

  

[object Object]
  1
  2

我收到的JSON对象是这样的:

0: {Item: "textforyou", Num: 88}
1: {Item: "MoreText", Num: 22}
2: {Item: "SimpleStuff", Num: 85} 

我希望xAxis上的类别看起来更像这样:

  

textforyou
  更多文字
  SimpleStuff

这段代码是我获取JSON对象并尝试获取其类别和系列数据的地方。

                $.ajax({
                xhrFields: { withCredentials: true },
                url: areaUrl + "api/Problem/ProblemsYTD",
                success: data => {
                    self.isLoading(false);
                    self.data(data);
                    self.setPlotData(data);
                    self.isLoaded(true);
                },
                error: data => {
                    self.loadingError(true);
                }
            });
        }

        self.setPlotData = (data: any) => {
            var len = data.List.length,
                i;

            var dataCats = new Array();

            for (i = 0; i < len; i++) {
                dataCats.push(
                    { name: data.List[i].Service }
                )
            }

            self.plotDataLabels.push({ data: dataCats });

            var dataItems = [];

            for (i = 0; i < len; i++) {
                dataItems.push(
                    { y: data.List[i].DaysOpen }
                )
            }



            self.plotData.push({ data: dataItems });
        }

最后,在创建条形图的页面上,这是我对页面的xAxis类别部分的命令。

                xAxis: {
                categories: viewModel.plotDataLabels(),
                crosshair: false
            },

我能够对系列数据做得很好,但我似乎无法将其用于类别/文字。任何帮助将不胜感激。

编辑:每个请求,当我在console.log ViewModel.plotDataLabels()时,我得到一个单个对象,返回&#34; data:Array [3]&#34;。一旦我访问该阵列,一切都显示如下

Dropdown 0: Object
Dropdown 1: Object
Dropdown 2: Object
    name: "SimpleStuff"
    __proto__: Object

1 个答案:

答案 0 :(得分:0)

您需要操纵ViewModel.plotDatalabels()以确保只获取名称而不是整个对象。这应该有效,用以下

替换您的类别值
categories: viewModel.plotDataLabels().map(function(obj){ return obj.name; })