我需要编写一个函数,它将从csv文件中过滤掉相关数据并返回包含数据的数组。
csv文件包含时间作为其中一列,我想过滤掉函数参数中提供的指定开始和结束时间内的行。我编写了以下函数filter_data
(另请注意,这使用了d3.js):
<code>
function filter_data(start_time, end_time) {
var formatDate = d3.time.format("%H:%M"),
parseDate = formatDate.parse;
var data1 = [];
d3.csv("data.txt", function(error, data) {
data.forEach(function(d) {
if(parseDate(d.time) >= parseDate(start_time) && parseDate(d.time) < parseDate(end_time))
data1.push(d);
});
return data1;
});
}
</code>
这背后的想法是构建可重用的代码来获取数据。但是上面的函数总是返回undefined
。我故意将返回值放在回调函数中,因为我知道这将是一个异步调用(我还在最后放置return语句,但它返回空数组!)。
答案 0 :(得分:1)
在这种情况下,您无法使用return
。您需要将回调函数作为filter_data
的参数之一传递,并使用它来返回数据。
function filter_data(start_time, end_time, callback) {
var formatDate = d3.time.format("%H:%M"),
parseDate = formatDate.parse;
var data1 = [];
d3.csv("data.txt", function(error, data) {
data.forEach(function(d) {
if(parseDate(d.time) >= parseDate(start_time) && parseDate(d.time) < parseDate(end_time)) {
data1.push(d);
}
});
callback(data1);
});
}
filter_data(start_time, end_time, function (data) {
console.log(data);
});