Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有一种好的/简洁的方法来重构嵌入的循环,而不是使用Rx操作符?_Javascript_Typescript_Rxjs - Fatal编程技术网

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));
      }