我正在尝试在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/上的示例和问题的错误

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

最佳答案

@ 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
         }
      ]
   }
]

关于javascript - 填补NVD3.js中的空白,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22351725/

10-11 08:10