gpt4 book ai didi

javascript - 从 bacon.js 流中重构通用组合器

转载 作者:太空宇宙 更新时间:2023-11-04 15:37:09 25 4
gpt4 key购买 nike

假设我有两个 bacon.js 流:

const stream1 = $('#input1').asEventStream('input')
.map(e => e.target.value)
.filter(inp => inp.length > 3)
.log();
const stream2 = $('#input2').asEventStream('input')
.map(e => e.target.value)
.filter(inp => inp.length > 3)
.log();

我想将按输入长度过滤的常见步骤提取到变量中,然后将其应用于两个流,幻想代码:

const my_filter = Bacon.map(e => e.target.value).filter(inp => inp.length > 3)
const stream1 = $('#input1').asEventStream('input')
.apply(my_filter)
.log();
const stream2 = $('#input2').asEventStream('input')
.apply(my_filter)
.log();

有一种惯用的方法吗?

EDIT1:澄清一下,my_filter 只是一个例子。我希望能够重构任意的组合器链并将它们应用到多个流。

EDIT2:正如 Bless Yahu 注意到的那样,我需要一张额外的 map 来获取事件的值(value)。这更好地说明了我的问题。

最佳答案

对我来说,这看起来像是一个基本的软件重构问题。

通常,如果您想对流应用任意转换,您可能需要编写一个函数,该函数将流作为参数并返回修改后的流作为结果。

在您的特定情况下,我会通过将步骤提取到函数中来消除重复。

const getValue = input => input.target.value
const my_filter = stream => stream.filter(text => text.length > 3)
const filteredInputValue = ($input) => {
my_filter($input.asEventStream('input').map(getValue))
const stream1 = filteredInputValue($('#input1')).log()
const stream2 = filteredInputValue($('#input2')).log()

在此示例中,您可以轻松修改 my_filter 以应用任何其他转换,例如限制和文本 trim 。

关于javascript - 从 bacon.js 流中重构通用组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44246961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com