一个变量返回两个单独的数组

时间:2018-12-07 11:50:25

标签: javascript node.js csv

我当前正在处理一个提取csv文件最后几行的脚本。最后一行包含温度。我想将file1的温度添加到file2的温度以计算平均温度。到目前为止,这是代码:

var fs = require('fs');
var csv = require('csv');


var handler = function(err, data) {
    if (err) throw err;
    var avgtemp = []
    var lines = data.trim().split('\n');
    var lastLine = lines.slice(-1)[0];
    var fields = lastLine.split(',');
    var humidity = fields.slice(-1)[0];
    var temperature = fields.slice(-2)[0]
    var doe = avgtemp.push(parseFloat(temperature))
    console.log(avgtemp)

}
fs.readFile('datafile1.csv', 'utf-8', handler)
fs.readFile('datafile2.csv', 'utf-8', handler)


现在,当控制台日志返回以下内容时:

[ 24.57083333333333 ]
[ 20.57083333333333 ]

我希望它看起来像这样:

[24.57083333333333, 20.57083333333333]

我已经尝试了多种方法,但是我做对了。先感谢您。

3 个答案:

答案 0 :(得分:1)

由于两个请求都没有以任何方式链接并且是异步的,因此一旦读取了两个文件,就必须手动对数据进行分组。

我通常使用util.promisify()来使fs.readFile()从接受回调的返回承诺的返回,所以一旦两个文件都被读取,我就可以使用Promise.all()创建数组:

var fs = require('fs');
var csv = require('csv');
var { promisify } = require( 'util' );

var readFile = promisify( fs.readFile );

Promise
    .all([
        readFile( 'datafile1.csv' ),
        readFile( 'datafile2.csv' )
    ])
    .then( files => files.map( data => {
        var lines = data.trim().split('\n');
        var lastLine = lines.slice(-1)[0];
        var fields = lastLine.split(',');
        var humidity = fields.slice(-1)[0];
        var temperature = fields.slice(-2)[0];
        return parseFloat( temperature );
    }))
    //  Temperatures should equal [24.57083333333333, 20.57083333333333]
    .then( temperatures => console.log( temperatures ))
    .catch( error => {
        //  Handle error.
        console.error( error );
    });

答案 1 :(得分:0)

问题出在这一行:

var avgtemp = []

您将avgtemp设置为两个“ readFile”中的一个空数组。

如果您希望它既存储又存储,请像这样修改脚本:

var fs = require('fs');
var csv = require('csv');
var avgtemp = []

var handler = function(err, data) {
    if (err) throw err;
    var lines = data.trim().split('\n');
    var lastLine = lines.slice(-1)[0];
    var fields = lastLine.split(',');
    var humidity = fields.slice(-1)[0];
    var temperature = fields.slice(-2)[0]
    var doe = avgtemp.push(parseFloat(temperature))
    console.log(avgtemp)

}
fs.readFile('datafile1.csv', 'utf-8', handler)
fs.readFile('datafile2.csv', 'utf-8', handler)

答案 2 :(得分:-1)

您必须在函数外部定义数组。 var avgtemp = []应该在全局级别,而不是在函数内部