【问题标题】:d3 updated json loads but doesn't access new datad3 更新的 json 加载但不访问新数据
【发布时间】:2018-08-03 16:03:38
【问题描述】:

我是业余爱好者。请温柔一点。

我正在尝试建立的经验:绘制图表。删除 SVG。加载新数据。绘制图表。

会有十几个 json 文件,所有结构都相同。我现在用两个。

我已经完成了更新和访问第二个 json 的所有事情,但是它无法绘制新的 x 轴,因为它

'无法读取未定义的属性'日期'

它第一次读取日期。它挂在 .tickValues 上,我在其中访问 json 中的第一个、中间和最后一个日期值...:

.call(d3.axisBottom(x)
    .tickValues([perf[start].date, perf[mid].date, perf[perflength-1].date])
    .tickFormat(d3.timeFormat("%m-%d-%y")))
    //...

这些是我在那里提供的变量:

var perf = json.performance
var perflength = json.performance.length
var mid = perflength/2
var start = 0

perf.forEach(function(d) {
  d.date = parseTime(d.date);
});

虽然我怀疑如果我能到达那里,它会继续抛出错误。 json 的结构是这样的:

{
  "performance" : [
    {
      "date": "1-27-15",
      "company": 0,
      "index": 0
    },
    {
      "date": "1-28-15",
      "company": 5.7,
      "index": -0.9
    }, 
    //...
  ]
}

所以我的问题是我错过了哪一步导致 json.performance 第二次未定义?

这是我的第一个问题,所以我不知道是否应该发布我的整个脚本文件。也许这可以从这里的信息中得到回答。如果你觉得有帮助,我会添加它。

【问题讨论】:

  • 如果您可以添加jsfiddleplunkr(或任何其他编辑器),在此错误可以重现,那将是完美的。 date of undefined 表明它没有找到合适的数据(在第二个 JSON 中) - 一个简单的修复。
  • 谢谢@Shashank。我创建了一个小提琴并用 myjson 托管了两个 json,但我认为我错过了让小提琴访问这些的步骤。小提琴是linkhere
  • 好的。谢谢。我会尽快回复你。
  • 很抱歉,我忙于自己的工作,无法回复。无论如何,很高兴问题已得到解决。

标签: javascript json d3.js


【解决方案1】:

您正在使用除数 / 来计算 mid 变量,稍后您将在 tickValues 中使用该变量。 / 运算符不保证您是整数值(例如:7/2 = 3.5),因此它可能无法访问 perf 数组,然后引发您发布的错误,因为您无法访问 @ 987654326@ 未定义值的属性。

因此,将除法结果解析为整数 (parseInt()) 或将其四舍五入 (Math.round) 以解决您的问题。

【讨论】:

  • 当然。因为我的一些数据集在数据中不会有偶数天。打算试试这个。谢谢你。您在 (parseInt()) 或 (Math.round) 之间有推荐吗? // 我试过了,不幸的是,它在同一个地方抛出了同样的错误。将继续摆弄。
  • 我的错字。这行得通。它绘制了下一个数据集,尽管没有转换,但我会弄清楚的。非常感谢。对于我在这里的第一次体验,你和@Shashank 很棒。
  • 很高兴为您提供帮助。实际上Math.round() 是正确的,因为parseInt() 将字符串解析为整数,而Math.round() 在您的情况下使用数字。
猜你喜欢
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多