Node.js nodejs:使用高地流计算平均值

Node.js nodejs:使用高地流计算平均值,node.js,stream,highland.js,Node.js,Stream,Highland.js,我刚刚开始使用highland.js和node中的streams,我一直在尝试计算一些数字的min/max/mean。 这就是我到目前为止所做的: const _ = require('highland'); const input = [ { val: 1 }, { val: 2 }, { val: 3 }, ]; _(input) .reduce((acc, { val }) => { if (typeof acc.min === 'undefined' || v

我刚刚开始使用highland.js和node中的streams,我一直在尝试计算一些数字的min/max/mean。 这就是我到目前为止所做的:

const _ = require('highland');

const input = [
 { val: 1 },
 { val: 2 },
 { val: 3 },
];

_(input)
  .reduce((acc, { val }) => {
    if (typeof acc.min === 'undefined' || val < acc.min) {
      acc.min = val;
    }
    if (typeof acc.max === 'undefined' || val > acc.max) {
      acc.max = val;
    }
    acc.count = (acc.count || 0) + 1;
    acc.sum = (acc.sum || 0) + val;
    return acc;
  }, {});
const=require('highland');
常量输入=[
{val:1},
{val:2},
{val:3},
];
_(输入)
.reduce((acc,{val})=>{
如果(acc.min的类型==‘未定义’| | valacc.max){
acc.max=val;
}
acc.count=(acc.count | | 0)+1;
acc.sum=(acc.sum | | 0)+val;
返回acc;
}, {});
如果我这样做,比如说,
toCallback
console.log
我得到的结果
{min:1,max:3,count:3,sum:6}
但是我对count和sum字段不感兴趣,我想要像
{min:1,max:3,mean:2}
这样的对象

然而,因为reduce的返回是一个对象,所以没有任何东西 高地可以用它-我只能消耗它,但我想在高地土地上做平均值


如何从这里继续,或者如何重构代码以获得平均值?

您可以尝试使用highland.map方法,如下所示:

\(输入)
.reduce({},(acc,{val})=>{
如果(acc.min的类型==‘未定义’| | valacc.max){
acc.max=val;
}
acc.count=(acc.count | | 0)+1;
acc.sum=(acc.sum | | 0)+val;
返回acc;
})
.map(统计=>{
返回{
min:stats.min,
max:stats.max,
平均值:stats.sum/stats.count
};
})
.toCallback(函数(错误、数据){
//包含所需的数据结构
控制台日志(数据);

});不确定您使用的是哪个高地版本,但您发布的代码会抛出一个错误,如“函数f未定义”。我交换了.reduce参数(首先传递了{},然后传递了一个函数),它开始工作了。我正在使用
3.0.0-beta.3
,它确实从2.x分支中反转了reduce的参数。谢谢,这个答案很有效,我将批准它。首先让我困惑的是,
reduce
返回了一个对象,我试图用一个
flatMap
来跟踪它,而不是
map
然后抛出了一个错误。作为旁注,我最后用一个不需要计数的“running mean”公式来完成它:
mean=(mean*(n-1)+val)/n
其中
n
是迭代编号