Javascript 查找Math.min行

Javascript 查找Math.min行,javascript,csv,row,min,Javascript,Csv,Row,Min,我已经在csv文件的列中找到了最低值,但找不到存储此值的行。有人能帮我吗?尽管我已经在谷歌搜索了很多天和网站,但我还是可以自己找到答案。提前谢谢 function getDataPointsFromCSV(csv) { var dataPoints = csvLines = []; var mini, a var minIndex = 0 csvLines = csv.split(/[\r?

我已经在csv文件的列中找到了最低值,但找不到存储此值的行。有人能帮我吗?尽管我已经在谷歌搜索了很多天和网站,但我还是可以自己找到答案。提前谢谢

function getDataPointsFromCSV(csv) {
            var dataPoints = csvLines =   [];   
            var mini, a
            var minIndex = 0
            csvLines = csv.split(/[\r?\n|\r|\n]+/);
            for (var i = 1; i <= csvLines.length; i++)
                if (csvLines[i] > 0) {
                    points = csvLines[i].split(",");
//points instead of csvLines
                    mini = points[4]
                }
            var a = mini                
            for (var i = 1; i <= csvLines.length; i++)
                if (csvLines[i] < mini) {
                    points = csvLines[i].split(",");                    

                    minIndex = i
                    mini = csvLines[i]                                      
// Find lowest value in a column5(=points[4])( but how to find the row that store the lowest value, can someone help me please?)                
                    lowestv = Math.min(price, lowestv)
             }
// example; mini.length          
            for (var i = mini.length; i <= mini.length+10; i++)
                if (csvLines[i].length > 0) {
                    points = csvLines[i].split(",");
                    price = points[4]
            }
                dataPoints.push({x: new Date(),y: parseFloat(minIndex)});   
        return dataPoints;
        }
函数getDataPointsFromCSV(csv){ var数据点=csvLines=[]; var mini,a var minIndex=0 csvLines=csv.split(/[\r?\n |\r |\n]+/); 对于(变量i=1;i 0){ 点=线[i]。拆分(“,”); //点而不是CSV线 迷你=点数[4] } var a=最小值
对于(var i=1;i我提供了一个片段,它使用您的注释中的示例数据:

const csv=“日期、开盘、高位、低位、收盘\n31/10/20199202.4575899383.1608929028.717449199.584833\n30/10/20199422.4633259426.8742179085.37035799205.726559\n29/10/20199248.4405629516.1810489232.6480869427.687584\n28/10/20199565.1018839805.1180899256.38989”
常量行=csv.split(/[\r?\n |\r |\n]+/)
const header=lines.shift().split(',')//切掉header,并将其存储在变量中
const cells=lines.map(e=>e.split(',').map(n=>!isNaN(n)?Number(n):n))
//转置数组,以便更容易获得最小/最大值
//换位(行变为列,列变为行)
//[a,b],[c,d]==>[a,c],[b,d]]
常量转置=单元格[0]。映射((e,i)=>{
返回单元格.map(el=>{
返回el[i]
})
})
const dates=transpose.shift()//切掉日期,并将其存储在变量中
const rowRange=transpose.map((e,i)=>{
常数min=Math.min(…e)
常数max=Math.max(…e)
返回{
col:i+1,//+1,因为日期被切掉了
colName:header[i+1],
最大值,
maxRow:e.indexOf(max)+1,//+1,因为标头被截断
maxRowDate:日期[e.indexOf(max)],
闵,
minRow:e.indexOf(min)+1,//+1,因为标头被截断
minRowDate:日期[e.indexOf(min)]
}
})

console.log(“result:,rowRange)
我将把它分为两个步骤。首先,我们解析CSV以获得一个对象数组。然后我们迭代它们以查找诸如
minVal
minRow
之类的统计信息(以及我们可能需要的任何其他信息)虽然这比一次完成效率稍低,但它会导致更简单、更可维护的代码

这里我们有了
csv2arr
,它将您的CSV字符串转换为如下所示的对象:

{
日期:“2019年10月31日”,
开放时间:9202.457589,
高:9383.160892,
低位:9028.71744,
收盘价:9199.584833
}
stats
,它使用这样一个对象数组来查找每列的统计信息,如
maxVal
minRow
。如果需要,我们可以对此进行增强以查找其他统计信息,如
mean
median
。其输出如下所示:

{
日期:{/*…*/},
打开:{/*…*/},
高:{/*…*/},
低:{/*…*/},
关闭:{
minVal:9199.584833,
maxVal:9427.687584,
minRow:{日期:2019年10月31日,开盘价:9202.457589,高点:9383.160892,低点:9028.71744,收盘价:9199.584833},
马克斯罗:{日期:2019年10月29日,开盘价:9248.440562,高点:9516.181048,低点:9232.648086,收盘价:9427.687584}
}
}
这是一种方法:

//很简单,但对某些数据很有用
常量csv2arr=(csv)=>{
const[headers,…rows]=csv.trim().split('\n').map(r=>r.split(','))
返回行。减少((a,r)=>[
A.
Object.assign(…(r.map((c,i)=>({[headers[i]]:isNaN(c)→c:Number(c)})))
], [])
}
常量统计=(行)=>行。减少(
(统计信息,行)=>Object.assign(
…Object.entries(row.map)([key,val])=>({[key]:({
minVal:key in stats&&stats[key]。minValval?stats[key]。maxVal:val,
minRow:输入统计数据和统计数据[key]。minRow[key]val?统计数据[key]。maxRow:row,
})}))
),
{}
)
常数csv=`
日期、打开、高、低、关闭
31/10/2019,9202.457589,9383.160892,9028.71744,9199.584833
30/10/2019,9422.463325,9426.874217,9085.370357,9205.726559
29/10/2019,9248.440562,9516.181048,9232.648086,9427.687584
28/10/2019,9565.101883,9805.118089,9256.148389,9256.148389
`
常量行=csv2arr(csv)
const statistics=stats(行)
console.log(行)

console.log(statistics)
是否可以在稍作修改后将这些代码插入到我的程序中?
var col2=arr.map(function(elem){return elem[1];//获取所有列2的值});var index=col2.indexOf(Math.max.apply(this,col2));
只是为了好玩:你能添加一个CSV示例(比如header+3或4行)吗您使用的?**日期开盘高点低点收盘日期2019年10月31日9202.457589 9383.160892 9028.71744 9199.584833 2019年10月30日9422.463325 9426.874217 9085.370357 9205.726559 2019年10月29日9248.440562 9516.181048 9232.648086 9427.687584 28/2019年10月9565.101883 9805.118089 9256.148389**这更清楚了。@Steve:我想这是您的决定。我的答案是wer提供了两个功能。一个是将带有标题的CSV字符串转换为具有由这些标题命名的属性的对象数组。另一个是查找此类对象数组的最小/最大值和行。我还没有仔细查看您的代码,但我希望这种组合将取代它,而不是它调用的东西。我认为这些函数不适合我,因为我要做的是找到
最短的v.length
并将其放入(var i=lowestv.length;i@Steve:很可能我的函数对您没有任何帮助。但它们试图以一种通用的方式解决您的问题。例如,如果最后您选中了
statistics.close.minRow