【发布时间】:2016-03-14 14:53:23
【问题描述】:
我想将任意但类似键控的对象流转换为 CSV 字符串流。为了做到这一点,我想查看流中的第一个对象,并为将添加到流中的对象键创建一个标题行。我已经做到了:
// Convert an object to a DSV
// NOTE: Assumes that all objects have the same properties!
export let toDSV = (delimiter=', ') => stream => {
let headerStream = stream.fork().head().flatMap(x => _.keys(x).collect());
return headerStream
.flatMap(headers => {
return _.sequence([
_([headers.join(delimiter)]),
stream.fork()
.pick(headers)
.map(_.values)
.flatMap(_.collect)
.invoke('join', [delimiter])
]);
});
};
对于以下流
_([{
foo: 1
bar: 2
baz: 3
}, {
foo: 2
bar: 1
baz: 4
}])
结果流应该是:
foo, bar, baz
1, 2, 3
2, 1, 4
虽然我认为fork() 存在背压问题,但仅创建了标题行,其中第一个流未被完全消耗。
那么,我如何“窥视”流的第一个元素,然后根据该信息处理流?
【问题讨论】:
标签: javascript stream reactive-programming highland.js