Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3.js用异步函数替换random()数据函数_Javascript_Asynchronous_D3.js - Fatal编程技术网

Javascript d3.js用异步函数替换random()数据函数

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()函数的输出:

我正在尝试修改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()函数的输出:

{"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);很好用!