Я пишу инструмент, который обрабатывает кучу текста, переданного в stdin
, каждая строка является «записью».Я хотел бы сделать свой код более функциональным, поэтому я хотел бы рассматривать набор строк как «последовательность» или «итеративный» и выполнять итерацию по нему, используя reduce
.
. Сейчас я нахожусьиспользуя модуль Node LineStream для обработки stdin
как набора строк, но он работает, отправляя событие data
для каждой строки - это нормально, он реализует Интерфейс Readable Stream .
Так что в настоящее время я делаю своего рода очень «ручное» уменьшение, передавая временное значение моей функции каждый раз, когда происходит событие data
:
var windows = [];
linestream.on('data', function(line) {
return windows = rollup(windows, extractDate(line), argv.w);
});
linestream.on('end', function() {
return process.stdout.write(toCsv(windows));
});
process.stdin.resume();
Но было бы более функционально сделать что-то вроде:
linestream.lines.reduce(rollup, []);
function rollup(windows, line) {
// would return a new interim or final value
}
Конечно, я мог бы «собрать» все строки в обычный массив и затем уменьшить его, но я попыталсяэто и использует слишком много памяти, когда я запускаю свой инструмент на большом наборе данных - так что нечто вроде итерации по потоку действительно то, что нужно.
Я думаю, что я спрашиваю, возможно линаписать Node-функцию / модуль wкоторый бы сделал это, или уже существует.
Спасибо!