我想将任意但类似键控的对象流转换为 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()
但是,仅创建了标题行,因为我认为这是第一个流未完全消耗的背压问题。
那么,我怎样才能“窥视”流的第一个元素,然后根据该信息处理流呢?