如何使用JavaScript将这些数据转换为每日高点和每日低点?

时间:2020-04-02 23:02:22

标签: javascript arrays

因此,我每10分钟从传感器获取这种格式的大量数据:

2/18/2020 1:33:09 PM 20.3 C
2/18/2020 1:43:09 PM 20.2 C
2/18/2020 1:53:10 PM 20.3 C
2/18/2020 2:03:10 PM 20.2 C
2/18/2020 2:13:10 PM 20.4 C

我使用VS Code和RegEx将其缩减为以下格式:

18,20.3
18,20.2
18,20.3
18,20.2
18,20.4

某事告诉我,使用JS数组和for循环创建这种格式应该非常简单:

Day 18: High 20.4 Low 20.2
(And rest of the month)

很明显,我是JS初学者,但这是我最熟悉的语言,因为我将其用于一些小型项目的Web开发。任何输入都值得赞赏,甚至只是朝着正确的方向踢!

2 个答案:

答案 0 :(得分:2)

您可以通过3个循环来执行此操作,一个循环用于解析数据,一个循环将每天的临时工作收集到一个数组中,一个循环来打印每天的高温/低温工作。

let str = `18,20.3
18,20.2
18,20.3
18,20.2
18,20.4`;
let lines = str.split("\n").map(line => line.split(",").map(parseFloat));
let days = [];
for (let [day, temp] of lines) {
    if (!days[day]) {
        days[day] = [];
    }
    days[day].push(temp);
}
for (let i = 0; i < days.length; i++) {
    if (days[i]) {
        console.log(`Day ${i}: High ${Math.max(...days[i])} Low ${Math.min(...days[i])}`);
    }
}

答案 1 :(得分:0)

如果您已经使用RegExp将其转换为该格式,则可以将其重写,因此将其转换为JSON格式。使用Javascript正则表达式或编辑器来使用此RE:

search for /\d{1,2}\/(\d{1,2})\/\d{4} \d{1,2}:\d{1,2}:\d{1,2} (?:AM|PM) (-?\d+\.\d) C/
replace with {"day":\1, "temp":\2},

使用一些修复程序(例如删除最后一个逗号并在整个文件内容周围添加[]),最终得到了这样的JSON。

[{"day":18, "temp":20.3},
{"day":18, "temp":20.2},
{"day":18, "temp":20.3},
{"day":18, "temp":20.2},
{"day":18, "temp":20.4}]

使用var arr = JSON.parse( filecontentString )将为您提供一系列对象,您可以在这些对象上访问数据。

b ='[{"day":18, "temp":20.3},\
{"day":18, "temp":20.2},\
{"day":18, "temp":20.3},\
{"day":18, "temp":20.2},\
{"day":18, "temp":20.4}]';

arr = JSON.parse(b);
var min = max = arr[0].temp;
var result = "";
var i = 1;
for (; i < arr.length; i++) {

    // still in the same day, compare values
    if( arr[i-1].day == arr[i].day && i < arr.length) {
        min = Math.min(arr[i].temp, min);
        max = Math.max(arr[i].temp, max);
    }
    else {
        // we reach this code at new day
        // print day's min/max
        result = result + "Day "+arr[i].day+": High "+max+" Low "+min+"\n";
        // reset for the new date
        min = max = arr[i].temp;
    }
}
// for the last entry
result = result + "Day "+arr[arr.length-1].day+": High "+max+" Low "+min+"\n";