Typescript 对可观察的对象数组进行排序

Typescript 对可观察的对象数组进行排序,typescript,rxjs,angular8,Typescript,Rxjs,Angular8,我们是否有一个可观测的操作符来根据属性对对象进行排序。 如下图所示 Obs$=[{“id”:4,“name”:“sss”},{“id”:48,“name”:“aaa”},{“id”:14,“name”:“ccc”}] 为了基于名称进行排序,我可以在比较函数的帮助下使用javascript排序方法进行排序。如果我们有任何rxjs方法来实现这一点,这将非常有帮助。为什么这个问题要用rxjs标记?仅仅因为字段标记为$,它就不是可观察的。实际上,您只有一个对象数组。您可以使用lodashsortBy对

我们是否有一个可观测的操作符来根据属性对对象进行排序。 如下图所示

Obs$=[{“id”:4,“name”:“sss”},{“id”:48,“name”:“aaa”},{“id”:14,“name”:“ccc”}]

为了基于名称进行排序,我可以在比较函数的帮助下使用javascript排序方法进行排序。如果我们有任何rxjs方法来实现这一点,这将非常有帮助。

为什么这个问题要用rxjs标记?仅仅因为字段标记为$,它就不是可观察的。实际上,您只有一个对象数组。您可以使用lodash
sortBy
对该数组进行排序

我想这段代码对您来说会很好。
Stackblitz示例可用

从'rxjs'导入{of};
从“rxjs/operators”导入{map};
const sortByName=(a,b)=>{
const nameA=a.name.tolocalueppercase();
const nameB=b.name.toLocaleUpperCase();
返回(nameAnameB)?1:0;
}
const$observable=of([
{“id”:4,“name”:“sss”},
{“id”:48,“name”:“aaa”},
{“id”:14,“name”:“ccc”}
]);
$observable
.pipe(map(data=>data.sort(sortByName)))
.subscribe(console.log);

我们能不能停止为数组排序这样简单的事情推荐lodash?很抱歉没有提及,我处理的是一个可观察的对象数组。所以我得到了这样的值。对于一个对象数组,我们可以使用排序函数本身,而不必使用lodash。好奇的是,有没有rxjs方法可以做到这一点。rxjs中没有排序操作符,正如我前面所说,我专门寻找rxjs。这是正常的javascript比较。你知道吗也可以使用localecompare而不是这个。RxJS中没有这样的操作符。如果需要,您可以创建一个自定义操作符,尽管我认为这与此无关。为什么你绝对希望用RxJS来完成?
import { of } from 'rxjs'; 
import { map } from 'rxjs/operators';

const sortByName = (a, b) => {
  const nameA = a.name.toLocaleUpperCase();
  const nameB = b.name.toLocaleUpperCase();
  return (nameA < nameB) ? -1 : (nameA > nameB) ? 1 : 0;
}

const $observable = of([
  { "id ": 4,  "name": "sss" },
  { "id ": 48, "name": "aaa" },
  { "id ": 14, "name": "ccc" }
]);

$observable
  .pipe(map(data => data.sort(sortByName)))
  .subscribe(console.log);