无法弄清楚如何使用 .pipe(map()) 对可观察数组进行排序



我正在尝试有效地对可观察数组进行排序,而无需为当前可观察量分配新的可观察量。

我已经尝试了许多不同的解决方案,但目前最接近的解决方案是我最接近的解决方案。

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]

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

我正在使用角度 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;
}

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

但是,您只需要根据数字是否大于下一个数字返回一个boolean。对于数字来说,这很简单。在这里,看看 MDN 示例sort.

试一试:

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

最新更新