好的,大家好
我对 promises
还不熟悉,并且正在尝试通过 promises
加载 CSV 文件后映射结果,然后对其进行后续应用。可以使用异步映射吗?在使用 promises
后有其他映射方法吗?还是我太傻了,完全错过了某些简单的东西?
var csv = (url) => new Promise(function(resolve) {
d3.csv(url, function(data) {
data.forEach(function(d) {
d.String = d.String;
d.Integer = +d.Integer;
})
resolve(data);
});
});
Promise.all([
csv('content.csv'),
csv('moreContent.csv')
])
.then(([csvOne, csvTwo]) => {
var collection = { csvOne, csvTwo };
var aveageMap = {};
collection.map((d,i) => {
if (!aveageMap[d.String]) {
aveageMap[d.String] = {
sum: 0,
average: 0
};
}
var theWord = aveMap[d.String];
theWord.sum += +d.Integer;
theWord.average = theWord.sum / collection.length;
});
console.log(aveageMap);
});
对于下面的评论和回答
使用一个数组是一个对象,但返回了两个CSV文件的完整合并... 这影响了theWord.sum / collection.length
这一行... 虽然它在某种程度上起作用,但我想使用一个对象数组,这样我就可以得到下面的输出,并在需要时独立访问每个对象。
collection {
dataCSV {
String: , Integer: ,
String: , Integer: ,
},
dataCSV2 {
String: , Integer: ,
String: , Integer: ,
}
}
.map()
方法。2)你应该在d3.csv
的回调函数中调用resolve
。现在它在数据准备好之前就已经解决了。 - m0meni对象
还是数组
集合 [ ] 。您的 JSON 和所使用的术语非常令人困惑。 - Paul Okeke