填补NVD3.js的空白

时间:2014-03-12 12:34:40

标签: javascript d3.js nvd3.js

我正在尝试在NVD3.js中制作水平分组堆积条形图。 一切都很有效,直到我的JSON数据中出现“缺口”,如下:

 [{
       "key": "Education & news",
           "values": [{
           "label": "2014-02-26",
               "value": 702
       }, {
           "label": "2014-02-27",
               "value": 204
       }, {
           "label": "2014-02-28",
               "value": 3213
       }]
   }, {
       "key": "Entertainment",
           "values": [{
           "label": "2014-02-26",
               "value": 21
       },
//Missing entry for 2014-02-27
       {
           "label": "2014-02-28",
               "value": 3213
       }]
   }]

我得到的错误是d3.js中的Uncaught TypeError: Cannot read property '1' of undefined。我在http://jsfiddle.net/vaa3V/

上提出的问题的示例和错误

我可以以某种方式自动填补空白吗?

1 个答案:

答案 0 :(得分:1)

@ shabeer90的评论正在进行中。您可以使用underscore.js获取域值并应用合理的默认值。

//Find domain values
DEFAULT = 0
defaults = _.chain(data)
  .pluck('values')
  .flatten().pluck('label')
  .uniq()
  .value()
  .map( function(item){ return {label:item, value:DEFAULT} })

// Group by 'label' so we can apply defaults
defaults = _.groupBy(defaults, 'label'))

// Apply defaults 
_.each(data, function (series) {  
    grouped = _.groupBy(series.values, 'label')
    series.values =  _.flatten( _.defaults(grouped, defaults)) 
})

应该给你:

[
   {
      "key": "Education & news",
      "values": [
         {
            "label": "2014-02-26",
            "value": 702
         },
         {
            "label": "2014-02-27",
            "value": 204
         },
         {
            "label": "2014-02-28",
            "value": 3213
         }
      ]
   },
   {
      "key": "Entertainment",
      "values": [
         {
            "label": "2014-02-26",
            "value": 21
         },
         {
            "label": "2014-02-28",
            "value": 3213
         },
         {
            "label": "2014-02-27",
            "value": 0
         }
      ]
   }
]