Javascript 如何解析存储在数组中的数据
我有一个正在使用的CSV文件。我不想将其转换为具有键和值的对象。我希望能够创建更多的数组来存储不同的值 即温度 哼 小时 雪深等 所有这些都是具有7个值的数组 现在,csv是如何存储在数据数组中的Javascript 如何解析存储在数组中的数据,javascript,arrays,string,object,Javascript,Arrays,String,Object,我有一个正在使用的CSV文件。我不想将其转换为具有键和值的对象。我希望能够创建更多的数组来存储不同的值 即温度 哼 小时 雪深等 所有这些都是具有7个值的数组 现在,csv是如何存储在数据数组中的 “2018年11月28日7:301128,-2.122,86.2,34.06,1.178320.2,20.4” “2018年11月28日7:451129,-2.325,85.6,34.54,1.771325.5,30.72” “2018年11月28日8:001130,-2.679,85.7,3
function get_Data(data) {
"use strict";
var fileData = new Array();
data = data.split(/\r\n|\r|\n/);
data = data.slice(Math.max(data.length - 7, 0));
createGraph(data);
}
我想要这样的数组
Tem=[-2.122,-2.325,-2.679,-2.872…]
小时=[7:30,7:45,8:00,8:15…]简单-
map
和split
每个逗号,然后查看它应该是哪个项目的索引:
var数据=[“2018年11月28日7:301128,-2.122,86.2,34.06,1.178320.2,20.4”,
"11/28/2018 7:45,1129,-2.325,85.6,34.54,1.771,325.5,30.72",
"11/28/2018 8:00,1130,-2.679,85.7,30.73,1.764,312.1,28.98",
"11/28/2018 8:15,1131,-2.872,88,34.55,1.073,306.6,25.65",
"11/28/2018 8:30,1132,-2.953,90.7,35.25,1.247,311.2,30.06",
"11/28/2018 8:45,1133,-3.064,93.3,35,1.449,312.6,30.13",
"11/28/2018 9:00,1134,-2.771,91.5,33.44,0.988,311,28.27",
];
可变项目={
日期:[],
记录编号:[],
温度:[],
湿度:[],
值5:[],
值6:[],
值7:[],
值8:[],
};
Object.keys(items).forEach((key,index)=>items[key].push(data.map(str=>str.split(“,”[index]));
控制台日志(项目)代码>试试这个,它应该可以工作。我知道数据的位置,所以很容易分割并找到术语和日期
var csv=document.getElementById(“csvFile”).innerHTML;
函数get_Data(数据){
var结果={terms:[],hours:[]}
var r=data.split(/\r\n |\r |\n/);
r、 forEach(函数(元素){
if(元素!==“”&&element.length>1){
变量项=元素。拆分(“,”[2]
变量日期=新日期(元素拆分(“,”[0])
var hour=date.getHours()+“:”+(date.getMinutes()你把一些事情搞混了。fileData
在做什么(似乎没有用过)?而slice
不是正确的方法
相反,请尝试:
function get_Data(csv) {
csv = csv.replace(/[\r\n]+/gi,"\n"); // reduce line endings into single LF chars
rows = csv.split("\n"); // split into array of rows
var result = [];
for (var i in rows) result.push(rows[i].split(",")); // split each row
return result;
}
(编辑)如果只需要CSV数据的最后X行,请使用:
function get_Data(csv,lastNumRows) { // get only the last <lastNumRows> rows
csv = csv.replace(/[\r\n]+/gi,"\n"); // reduce line endings into single LF chars
rows = csv.split("\n").slice(-lastNumRows); // split into array of rows
var result = [];
for (var i in rows) result.push(rows[i].split(",")); // split each row
return result;
}
函数get_Data(csv,lastNumRows){//仅获取最后一行
csv=csv.replace(//[\r\n]+/gi,“\n”);//将行尾减少为单个LF字符
rows=csv.split(“\n”).slice(-lastNumRows);//拆分为行数组
var结果=[];
for(var i in rows)result.push(rows[i].split(“,”);//拆分每一行
返回结果;
}
您实际上不必解析任何内容。您只需按逗号拆分即可。要创建列i的值数组,请执行以下操作:values=arr.map(str=>str.split(',')[i])
。很多相关的问题:你能把每一个值都加起来吗?我们有前四个值,但每行有八个值。是的,第五个是雪深,第六个是速度第七个是WindDir_D1_WVT,第八个是SDT。没错,我不需要文件数据。我想要文件的最后7行。现在我知道你是如何使用切片的了。我编辑了我的答案,只得到最后7行。哦,但我也看到我误解了你原来的问题,你实际上需要这些列(例如,所有温度或所有湿度),不是行。我的错。我不想做定位,因为每次有新行时记录都会发生变化。这会影响数组中存储的值。我不知道这是否有意义,但@Jack Bashford做了同样的事情。我的解决方案是这样的,因为这样你就可以控制数据解析。比如一个小时。但是,是的,你做了什么