Javascript 有没有一种好的/简洁的方法来重构嵌入的循环,而不是使用Rx操作符?
执行以下功能Javascript 有没有一种好的/简洁的方法来重构嵌入的循环,而不是使用Rx操作符?,javascript,typescript,rxjs,Javascript,Typescript,Rxjs,执行以下功能 function test(callbackFn) { for (var i = 1; i < 10; i++) { for (var k = 1; k < 100; k++) { callbackFn(i, k); } } } 我想为循环重构。是否有合适的RxJs操作符允许我这样做 我已经研究了zip、concat和merge操作符,但它们似乎不适合这个用例 任何建议或提示都将不胜感激。实际上concatMap()应该适合
function test(callbackFn) {
for (var i = 1; i < 10; i++) {
for (var k = 1; k < 100; k++) {
callbackFn(i, k);
}
}
}
我想为循环重构。是否有合适的RxJs操作符允许我这样做
我已经研究了zip、concat和merge操作符,但它们似乎不适合这个用例
任何建议或提示都将不胜感激。实际上concatMap()
应该适合您,这取决于callbackn(i,k)
应该做什么
这两个问题是关于按顺序调用一系列请求,这可能与您需要执行的操作非常相似:
- 我要找的是笛卡尔积。这可以通过使用concatMap操作符轻松实现
下面是重构后的函数
function test(callbackFn) {
Rx.Observable.range(1, 10)
.concatMap(i => Rx.Observable.range(1, 100), (i, k) => [i, k])
.subscribe(([i, k]) => callbackFn(i, k));
}
希望这个例子能对某些人有用。为什么你不喜欢每次两个foreach call?我的现实问题比这个复杂得多。我想让问题尽可能简单。
另外,我不想嵌入两个数组。forEach调用
那里没有数组,所以你甚至不能forEach它。除非该代码表示对数组进行迭代。还是两个阵列?不太清楚。我的现实世界问题比这复杂得多。
但这太简单了。这里的确切意图是什么?我们需要更多的细节。您正在迭代两个数组吗?嵌套数组?它是一个包含10个元素的数组吗?一个100个元素的数组?数组数量未知?你到底想解决什么问题?您确定需要从1开始而不是从0开始吗?您是否只想调用(伪代码)回调([1-10],[1-1000])
,其中这些表示范围,您需要所有排列?总是这些数字吗?
function test(callbackFn) {
Rx.Observable.range(1, 10)
.concatMap(i => Rx.Observable.range(1, 100), (i, k) => [i, k])
.subscribe(([i, k]) => callbackFn(i, k));
}