nodejs:用高地流计算平均值

nodejs: calculate mean with highland streams

我刚刚开始使用 highland.js 和节点中的流,我一直在尝试计算一些数字的 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;
  }, {});

如果我然后做,比方说,toCallbackconsole.log 我得到的结果 {min: 1, max: 3, count: 3, sum: 6} 但我对计数和求和字段不感兴趣,我想要像 {min: 1, max: 3, mean: 2}.

这样的对象

但是,由于reduce的return是一个对象,所以什么都没有 高地可以用它 - 我只能消费它但我想在高地做平均。

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

您可以尝试使用这样的高地 .map 方法:

_(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;
 })
 .map(stats => {
  return {
   min: stats.min,
   max: stats.max,
   mean: stats.sum / stats.count
  };
 })
 .toCallback(function (err, data) {
  //Contains the data structure you need
  console.log(data);
 });