2015-02-06 73 views
0

我正在讀取文件列表filestoplot.txt並將它們加載到數組(datasets[fileno])。這些二維數組結構相似,我想計算每列(所有組合數組)的最大值和最小值,以便我可以正確建立全局d3軸。但是,我的代碼(如下所示)未正確返回gloablmaxgloablmin計算數據域

var files=[]; 
var datasets=[],totalfiles; 
var i,j,dset=1,olddset=0,maxscale=0; 
var maxnecr=0; 
var cols=8; 
var maxvalues=[]; 
var globalmin=[];gloablmax=[]; 

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
function loadfilenames(){ 

d3.csv("./filestoplot.txt", 
function(file){ 
    files = file.map(function(d) { for (key in d) { fn=d[key]; } return fn; }) 
    totalfiles=files.length; 
    for (i=0;i<totalfiles;i++){ 
     datasets[i]=[]; 
     loaddataset(i); 
     maxvalues[i]=[]; 
    } 
    if (filesloaded==(totalfiles-1)) maxmin(); 
} 
); 
} 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
function loaddataset(fileno){ 
d3.csv(files[fileno],function(a){ 
    console.log("loading file "+filesloaded);filesloaded++; 
    datasets[fileno]=a.map(function(d1) { 
    return [ 
    +d1["f1"] , 
    +d1["f2"] , 
    +d1["f3"] , 
    +d1["f4"] , 
    +d1["f5"] , 
    +d1["f6"] , 
    +d1["f3"]/(+d1["f3"] + +d1["f5"]), 
    +d1["f7"] 
    ]; 
} 
); 
} 
); 
} 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
function maxmin(){ 
for (j=0; j <cols; j++) { 
    globalmin[j]=Math.Min.apply(null,d3.extent(maxvalues,function(d){ return d[j][0]; })) 
    gloablmax[j]=Math.Max.apply(null,d3.extent(maxvalues,function(d){ return d[j][1]; })) 
    //d3.extent(maxvalues,function(d){ console.log(d[j]);}); 
} 
} 

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

</script> 

<body style="max-width:90%" onload="loadfilenames();"> 
<script> 

function changedataset(el){ 
    console.log(el.checked) 
    maxmin(); 
} 
</script> 
</body> 

在Chrome控制檯上,我可以看到maxvalues有正確的數據,但是最大最小顯示了這個錯誤:

「遺漏的類型錯誤:無法讀取屬性未定義‘應用’」

我對任何指針都會很有幫助。謝謝。

回答

2

應用僅用於兩次,

Math.Min.apply 
Math.Max.apply 

如果應用是一個「的未定義的屬性」,則表示Math.Min和/或Math.Max是未定義的。

它看起來像你只是有一個大寫問題,嘗試Math.minMath.max(當然也可能有其他問題,但這應該是TypeError的來源)。

+0

你說得對。只要將它改爲'Math.max'和'Math.min'解決了它。我只是沒有意識到我把它大寫了。 – user3259040 2015-02-06 20:49:15

+0

另一個問題:何時適合自動調用maxmin()。我把它作爲hack,只是在所有數據加載後立即調用它。在for(i = 0; i user3259040 2015-02-06 20:57:13

+0

當你在for循環之後說,你的意思是在d3.csv回調(* for循環之後的* right *)之內,還是在它之外?如果它在回調之外,那意味着它可能在for循環之前被調用,即使它在代碼中低於它。 – 2015-02-06 21:09:21