【发布时间】:2017-02-13 18:32:43
【问题描述】:
我刚刚开始使用 highland.js 和 node 中的流,我一直在尝试计算某些数字的最小/最大/平均值。 这是我目前所拥有的:
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;
}, {});
如果我这样做,比如说,toCallback 和 console.log 我得到的结果
{min: 1, max: 3, count: 3, sum: 6} 但我对 count 和 sum 字段不感兴趣,我想要像 {min: 1, max: 3, mean: 2} 这样的对象。
但是,由于reduce的返回是一个对象,所以什么都没有 高地可以用它 - 我只能消耗它,但我想在高地做平均。
我该如何从这里继续,或者我应该如何重构代码以获得平均水平?
【问题讨论】:
-
不确定您使用的是哪个高地版本,但您发布的代码会引发类似“函数 f 未定义”的错误。我交换了 .reduce 参数(先传递 {},然后是函数),它开始工作了。
-
我正在使用
3.0.0-beta.3,实际上,它从 2.x 分支中反转了 reduce 的参数。
标签: node.js stream highland.js