在csv文件中查找最小值和最大值

时间:2014-03-13 10:34:57

标签: javascript arrays csv 2d max

为了扩展我的javascript对象,我想找到多列csvfile的minium和maximum。我已经找到了解决方案,但我无法抓住正确的方法。我在这里找到了一个解决方案:Min and max in multidimensional array但我没有得到输出。 我现在的代码在这里:

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  
}
}

1 个答案:

答案 0 :(得分: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);