Javascript d3.js用异步函数替换random()数据函数
我正在尝试修改Mike Bostock的泳道日历,并用JSON文件替换随机数据生成函数Javascript d3.js用异步函数替换random()数据函数,javascript,asynchronous,d3.js,Javascript,Asynchronous,D3.js,我正在尝试修改Mike Bostock的泳道日历,并用JSON文件替换随机数据生成函数 d3.json("random.json", function(data) { // console.log(d3.entries(data)); //var data = randomData() var lanes = data.lanes; var items = data.items; var now = new Date(); ..... }); 其中数据文件类似于random()函数的输出:
d3.json("random.json", function(data) {
// console.log(d3.entries(data));
//var data = randomData()
var lanes = data.lanes;
var items = data.items;
var now = new Date();
.....
});
其中数据文件类似于random()函数的输出:
{"lanes":[{"id":0,"label":"lane 0"},{"id":1,"label":"lane 1"},{"id":2,"label":"lane 2"},{"id":3,"label":"lane 3"},{"id":4,"label":"lane 4"}],"items":[{"id":0,"lane":0,"start":"2012-01-21T18:00:00.000Z","end":"2012-01-26T21:00:00.000Z","class":"past","desc":"This is a description."},{"id":1,"lane":0,"start":"2012-01-28T18:00:00.000Z","end":"2012-02-02T21:00:00.000Z","class":"past","desc":"This is a description."},{"id":2,"lane":0,"start":"2012-02-05T13:00:00.000Z","end":"2012-02-10T18:00:00.000Z","class":"past","desc":"This is a description."},{"id":3,"lane":0,"start":"2012-02-13T15:00:00.000Z","end":"2012-02-15T13:00:00.000Z","class":"past","desc":"This is a description."},{"id":4,"lane":0,"start":"2012-02-17T16:00:00.000Z","end":"2012-02-22T13:00:00.000Z","class":"past","desc":"This is a description."},{"id":5,"lane":0,"start":"2012-02-23T13:00:00.000Z","end":"2012-02-23T21:00:00.000Z","class":"past","desc":"This is a description."},{"id":6,"lane":0,"start":"2012-02-24T18:00:00.000Z","end":"2012-03-01T14:00:00.000Z","class":"past","desc":"This is a description."}
我得到的错误是:
TypeError:n.getFullYear不是函数
我相信这是因为在
数据中,项目的start
和end
属性是字符串,而不是日期(函数randomData()
将它们作为日期返回)
我相信这是因为在数据中,项目的start
和end
属性是字符串,而不是日期(函数randomData()
将它们作为日期返回)
解析JSON后,需要显式地将日期从字符串转换为日期类型
在给定的示例中,开始和结束变量被创建为日期对象
var dtS = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate() + randomNumber(1,5), randomNumber(8, 16), 0, 0);
var dateOffset = randomNumber(0,7);
var dt = new Date(dtS.getFullYear(), dtS.getMonth(), dtS.getDate() + dateOffset, randomNumber(dateOffset === 0 ? dtS.getHours() + 2 : 8, 18), 0, 0);
您可以通过迭代项目并分别转换每个项目来实现这一点
items.forEach(function(d){
d.start = new Date(d.start);
d.end = new Date(d.end);
});
d3有一些帮助程序用于处理更复杂的日期字符串。您可以在此处阅读更多关于它们的信息:
解析JSON后,需要显式地将日期从字符串转换为日期类型
在给定的示例中,开始和结束变量被创建为日期对象
var dtS = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate() + randomNumber(1,5), randomNumber(8, 16), 0, 0);
var dateOffset = randomNumber(0,7);
var dt = new Date(dtS.getFullYear(), dtS.getMonth(), dtS.getDate() + dateOffset, randomNumber(dateOffset === 0 ? dtS.getHours() + 2 : 8, 18), 0, 0);
您可以通过迭代项目并分别转换每个项目来实现这一点
items.forEach(function(d){
d.start = new Date(d.start);
d.end = new Date(d.end);
});
d3有一些帮助程序用于处理更复杂的日期字符串。您可以在此处阅读更多关于它们的信息:
这很好-我将看看是否可以替换数组中的日期项,而不是对它们进行后处理。我将所有对“d.start”和“d.end”的引用替换为d.start=新日期(d.start);d、 结束=新日期(d.end);很好用!这很好-我将看看是否可以替换数组中的日期项,而不是对它们进行后处理。我将所有对“d.start”和“d.end”的引用替换为d.start=新日期(d.start);d、 结束=新日期(d.end);很好用!