Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Angular 无法理解如何使用.pipe(map())对可观察数组进行排序_Angular_Sorting_Rxjs_Observable - Fatal编程技术网

Angular 无法理解如何使用.pipe(map())对可观察数组进行排序

Angular 无法理解如何使用.pipe(map())对可观察数组进行排序,angular,sorting,rxjs,observable,Angular,Sorting,Rxjs,Observable,我试图有效地对可观察数组进行排序,而不将新的可观察数组分配给当前的可观察数组 我尝试过许多不同的解决方案,但目前我使用的是最接近的 let testObvs$ = of([3, 5, 2, 1, 4]); testObvs$.pipe(map(results => { return results.sort((a, b) => { let res = compare(a, b); return direction === 'asc' ? res : -res;

我试图有效地对可观察数组进行排序,而不将新的可观察数组分配给当前的可观察数组

我尝试过许多不同的解决方案,但目前我使用的是最接近的

let testObvs$ = of([3, 5, 2, 1, 4]);
testObvs$.pipe(map(results => {
   return results.sort((a, b) => {
    let res = compare(a, b);
    return direction === 'asc' ? res : -res;
  })
}))

testObvs$.subscribe(e => console.log(e))
订阅[1,2,3,4,5]中的预期结果返回结果[3,4,2,1,4]

我需要根据方向订购testObvs$。我已经用数字[]测试了比较和排序函数,它们确实以正确的顺序返回正常数组

我使用的是angular 8.2和rxjs 6.4.0

这种排序的最终目标是按如下某种属性对对象数组进行排序

 this.questions
        .pipe(
          map(results => {
            return results.sort((a, b) => {
              let res = compareString(a[column].replace(/<.*?>/g, ''), 
b[column].replace(/<.*?>/g, ''));
              debugger;
              return direction === 'asc' ? res : -res;
            })
          })
        ).subscribe();


export const compareString = ( a, b ) => {
if ( a < b ){
    return -1;
  }
  if ( a > b ){
    return 1;
  }
  return 0;
}
this.questions
.烟斗(
地图(结果=>{
返回结果。排序((a,b)=>{
设res=compareString(a[column]),替换(//g',),
b[列]。替换(//g',);
调试器;
返回方向=='asc'?res:-res;
})
})
).subscribe();
导出常量比较字符串=(a,b)=>{
if(ab){
返回1;
}
返回0;
}

您的实现存在一些问题。不确定您在这里调用的比较方法是什么

但是您只需要根据一个数字是否大于下一个数字返回一个
布尔值。但对于数字来说,这相当简单。在这里,看一看MDN的例子

尝试一下:

let testObvs$ = of([3, 5, 2, 1, 4]);
    testObvs$
      .pipe(
        map(results => {
          return results.sort((a, b) => (direction === "asc" ? a - b : b - a));
        })
      )
      .subscribe(res => console.log(res));

嘿,Sidd,不确定这个问题是否有效——如果我们有简单的JS排序方法,为什么要使用obserbable、pipe、map来做同样的事情,不是吗?即使在函数内部,您也使用了相同的函数,即我刚才从OPs示例中获取的
arrya.sort
。我很确定OP是想通过在一个简单的阵列上进行实验来了解一些关于可观测的东西。没有考虑到这里的实际情况@SiddAjmera你说得很对,我正在尝试创建一个排序,它可以根据选定的属性对对象数组进行排序,但当时甚至无法对一个简单的可观察数组进行排序。我将把这个标记为已回答,就像你回答了我的问题一样。遗憾的是,仍然坚持在对象数组中实现相同的代码。如果您仍然希望提供帮助,我将稍微更新一下我的问题,以便添加涉及对象的代码。