2014-03-13 192 views
0

尋找擴展我的javascript對象,我想查找最小值和最大值的多列csv文件。我查找了解決方案,但我無法真正掌握正確的方法。我在這裏找到了一個解決方案:Min and max in multidimensional array但我沒有得到輸出。 我的代碼,我現在是在這裏:在csv文件中查找最小值和最大值

function import(filename) 
{ 
var f = new File(filename); 
var csv = []; 
var x = 0; 
if (f.open) { 
    var str = f.readline(); //Skips first line. 
    while (f.position < f.eof) { 
     var str = f.readline(); 
     csv.push(str); 
    } 
    f.close(); 
} else { 
    error("couldn't find the file ("+ filename +")\n"); 
} 


for (var i=(csv.length-1); i>=0; i--) { 

     var str = csv.join("\n"); 

     var a = csv[i].split(","); // convert strings to array (elements are  delimited by a coma) 
     var date = Date.parse(a[0]); 

     var newdate = parseFloat(date); 
     var open = parseFloat(a[1]); 
     var high = parseFloat(a[2]); 
     var low = parseFloat(a[3]); 
     var close = parseFloat(a[4]); 
     var volume = parseFloat(a[5]); 

     var volume1000 = volume /= 1000; 
     var adjusted_close = parseFloat(a[6]); 

    outlet(0, x++, newdate,open,high,low,close,volume1000,adjusted_close); // store in the coll 
} 
} 

回答

0

編輯 如果有什麼,而不是數組的數組,可以使用對象的數組?這假定你正在使用underscore

var outlet=[]; 
var outletkeys=['newdate','open','high','low','close','volume','volume1000','adjusted_close']; 
for (var i=(csv.length-1);i>0; i--) { 
    var a = csv[i].split(","); 
    var date = Date.parse(a[0]); 
    var volume = parseFloat(a[5],10); 

outlet.push(_.object(outletkeys, [parseFloat(date,10) ,  parseFloat(a[1],10) ,  parseFloat(a[2],10) ,  parseFloat(a[3],10) ,  parseFloat(a[4],10) ,  parseFloat(a[5],10) ,  volume /= 1000 ,  parseFloat(a[6],10) ])); 
} 

則列 '開放' 的陣列將

_.pluck(outlet,'open'); 

和最小它

_.min(_.pluck(outlet,'open')); 

EDIT2

讓我們忘掉強調了現在。我相信你需要在第二列獲得最大值,這就是你在open變量中的值。

¿如果你可以在for循環之後有這個值,會有幫助嗎?例如

var maxopen=0; 
for (var i=(csv.length-1); i>=0; i--) { 
    var a = csv[i].split(","); 
    var date = Date.parse(a[0]); 
    var newdate = parseFloat(date); 
    var open = parseFloat(a[1]); 
    maxopen=(open>maxopen)? open : maxopen; // open overwrites the max if it greater 
    ... 
    ... 
    outlet(0, x++, newdate,open,high,low,close,volume1000,adjusted_close); 
} 
console.log('Maximum of open is',maxopen); 
+0

我正在使用for循環以相反順序產生數組內容。我從一個多列csv文件開始,我刪除第一行(標題),然後以相反的順序讀取數據。然後數據通過插座0出去。 我想要列2的最大值(我想我可以改變函數來查找最小值)。 –

+0

我編輯我的答案使用下劃線方法pluck,object和min。試一試! – amenadiel

+0

我不得不完成另一個項目,所以這留在雷達下。我正在回頭看看,但我無法理解你是如何做到的。我在哪裏必須把你的代碼放在我的代碼中?另外,10是什麼意思,你從哪裏得到這個數字? outlet.push是什麼意思?我使用插座作爲包含maxMSP中代碼的盒子的插座。 –