gpt4 book ai didi

Javascript 流库 - 实现

转载 作者:行者123 更新时间:2023-11-28 17:08:52 25 4
gpt4 key购买 nike

java 流(或其他语言的任何其他函数库)非常好。

例如,您可以拥有 (js sudo 代码)。

Stream.of([1, 2, 3]).filter(x => x > 2).map(x => x * 5).result(); // [15]

忽略语法或具体实现,这只是一个示例。

现在我的问题是流程有点复杂。

例如,如果我在每个步骤都需要不同的数据:

Stream.of([1,2, 3])
.map(x => x * 3)
.zip([4, 5, 6])
.map(..//here i need the initial array)
.map(..//here i need the zipped array)
.total(..//

正如您所见,在某些方法中我需要最后计算的值,在某些方法中我需要初始值。

此外,在某些情况下我需要中间值,但在计算它们之后。

map(x => x * 1).map(x => x * 2).map(x => x * 4).map(..//i need the result from 2nd map (x*2)

这是一个愚蠢的例子,但说明了问题。

这个问题有没有好的解决办法。

我认为我可以保存对象中的所有数据,但这会导致更冗长的代码,因为在每个步骤中我都必须设置并从对象中获取属性。

另一个例子:对数字求和:[1, 2, 3, 4] -> 10过滤 2 以上的数字:[1, 2, 3, 4] -> [3, 4]将每个数字与总和相乘:[30, 40]

  Stream.of([1,2,3, 4])
.sum()
.filter(// here will be the sum, but i want the initial array and later the sum)
.map(// here i want the filtered array and the calculated sum)

谢谢

最佳答案

如果您需要中间结果,请保存计算:

const initial = Stream.of([1,2,3,4]);
const total = initial.sum();
const result = initial.filter(x => x > 2).map(x => x * total);

上面的示例是编写此类代码的最合乎逻辑的方式。我不明白你为什么要编写如下代码:

Stream.of([1,2,3, 4])
.sum()
.filter(/* here will be the sum, but i want the initial array and later the sum */)
.map(/* here i want the filtered array and the calculated sum */)

您的示例令人困惑且具有误导性。以函数式风格编写的代码不需要链接。

关于Javascript 流库 - 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55040234/

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