2017-09-25 46 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

相關問題