2017-09-25 33 views
1

我知道一些可以处理多个csv文件的答案,当你知道将要上传多少文件时。dc.js与crossfilter和d3,如何一次加载多个csv文件,而不知道用户将要上传多少个文件

这是逐个获取文件名并将文件放入队列的代码。

var q = queue(); 
$('#files').change(function(){ 
    var fileNames = ""; 
    for(var i = 0; i < this.files.length; i++){ 
     fileNames += ", " + this.files[i].name; 
     .defer(d3.csv, this.files[i].name); 
    } 
} 

我的问题是如何循环队列中的数据并将其添加到交叉过滤器。

q.await(function(error, q1data, q2data) {} 

如何查看队列中的内容,使用Google Chrome的开发人员工具。

我见过一个例子https://github.com/dc-js/dc.js/blob/master/web/examples/composite.html

但是当你知道有多少文件都没有这一项只处理。

这是一个类似的问题,但这不是我想要的。 Loading multiple CSV in DC.js, adding a value, and concatenating the results into a single dataTable

+0

什么决定了有多少文件?你是否在加载文件之前知道会有多少? – Will

+0

我的web应用程序有一个按钮,允许用户上传文件,用户可以一次加载1个或多个文件。 –

回答

1

您需要使用“awaitAll”而不是“await”,因为“callback(error,files){}”函数将包含您作为数组上传的所有文件。

Here是帮助文档和demo

+0

同意。确切地说,你也可以使用'.await()',但这会很烦人,因为你必须遍历['arguments'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments) - '.awaitAll()'会以方便的数组给你提供结果。 – Gordon

+0

非常感谢!在阅读您的建议后,我已经得到了我想要的。 –

+0

@Kreedz乐意帮忙! – 1Cr18Ni9

相关问题