javascript - 我如何在 JavaScript 中执行操作,就像我们在 Java 流中执行操作管道一样?
问题描述
在使用流的 Java 8 中,当我一个接一个地链接方法时,操作的执行是以流水线方式执行的。
例子:
List<Integer> nums = Arrays.asList(1,2,3,4,5,6);
nums.stream().map(x->{
x = x * x;
System.out.println("map1="+x);
return x;
}).map(x->{
x = x * 3;
System.out.println("map2="+x);
return x;
}).forEach(x-> System.out.println("forEach="+x));
输出:-
map1=1
map2=3
forEach=3
map1=4
map2=12
forEach=12
map1=9
map2=27
forEach=27
map1=16
map2=48
forEach=48
map1=25
map2=75
forEach=75
map1=36
map2=108
forEach=108
但是当我在javascript中进行类似尝试时。结果不同。在javascript中,第一个操作完成,然后执行第二个操作。示例:-
var nums = [1,2,3,4,5,6 ];
nums.map(x => {
x = (x * x);
console.log('map1='+x);
return x;})
.map(x => {
x = x * 3;
console.log('map2='+x);
return x;})
.forEach(x=> console.log('forEach='+x));
输出:-
map1=1
map1=4
map1=9
map1=16
map1=25
map1=36
map2=3
map2=12
map2=27
map2=48
map2=75
map2=108
forEach=3
forEach=12
forEach=27
forEach=48
forEach=75
forEach=108
JavaScript 中是否有任何方法可以使其以管道方式执行操作,并且我可以像在 Java 程序中一样获得输出?
解决方案
也许稍后(或永远不会)您可以使用实际的实验性 管道运算符|>
,它具有以下语法:
expression |> function
您可以通过将函数作为单独的函数并迭代每个管道的流数组来实现您想要的结果。
这仅适用于 FF。从 58 版开始:此功能位于--enable-pipeline-operator
编译标志后面。
const
a = x => { x = x * x; console.log("map1=" + x); return x; },
b = x => { x = x * 3; console.log("map2=" + x); return x; },
c = x => console.log("forEach=" + x)
var nums = [1, 2, 3, 4, 5, 6];
nums.forEach(v => v |> a |> b |> c);
管道作为函数(启用管道的函数组合)与所需函数的闭包相同。
const
pipe = (...functions) => input => functions.reduce((acc, fn) => fn(acc), input),
a = x => { x = x * x; console.log("map1=" + x); return x; },
b = x => { x = x * 3; console.log("map2=" + x); return x; },
c = x => console.log("forEach=" + x)
var nums = [1, 2, 3, 4, 5, 6],
pipeline = pipe(a, b, c);
nums.forEach(pipeline);
推荐阅读
- selenium - 如何消除 Xpath 的使用?
- python - 如何使用代理字典中的随机代理向 url 发送 get 请求?
- r - 在每个服务的代码周围加上引号的快速方法
- html - 使用角度删除表中的行时如何刷新结果计数
- c# - SQL Server 和 C# 中 DateTime 的毫秒数不相同
- python - 无法理解 keras 密集层的输出
- python-3.x - 我应该在哪里修改我的广度优先搜索算法以找到 2 个节点之间的最短路径?
- jdbc - Can Kubernetes services deployed by helm configured to be restarted when manually deleting via kubectl?
- javascript - 如何使搜索图标在 ag-grid 的列中永久可见?
- database - 如何在一段时间后使用 postgresql 更新值