ค้นหาเว็บไซต์

typescript - คุณจะจัดเรียง Observable<Item[]> ใน Angular 6 พร้อมกับ rxjs 6 ได้อย่างไร?


ฉันแค่อยากจะจัดเรียงข้อมูลใน Observable ของประเภทคลาสของฉันที่ชื่อว่า 'Category' ดังนั้น Observable ที่ฉันต้องการจัดเรียง

ดังนั้นฉันจึงอัปเกรดเป็น Angular6 และ rxjs6 พร้อมกับมัน ปัญหาหนึ่งที่อาจเป็นเรื่องง่ายเกี่ยวกับ Typescript ที่ฉันไม่รู้คือฉันจะทำการ 'sort' แบบนี้ได้อย่างไร:

sort((x,y) => x.description < y.description ? -1 : 1)

ภายในของ Angular6 ใหม่? ฉันเคยทำสิ่งนี้ในเวอร์ชัน 5

var response = this.http.get<Category[]>(this.endpoint);
        .map((result: Response) => this.alphabetize(result));


alphabetize = (result: Response) => this.Categories = result.json()
.sort((x,y) => x.description < y.description ? -1 : 1)

และมันทำงานได้ดี ตอนนี้ใน HttpCLIENTModule และ HttpClient ที่ Angular ต้องการให้คุณใช้ มันง่ายขึ้น:

var data = this.http.get<Category[]>(this.endpoint);

ฉันแค่ใส่เวทมนตร์ <(object)> ก่อนจุดสิ้นสุดของฉันแล้วมันก็ทำให้ฉันเอง เจ๋งมาก แต่ฉันไม่เห็นว่าคุณจะเข้าไปในวัตถุได้อย่างง่ายดายเพื่อจัดเรียงจากมันด้วย Source, Pipe, from, of ได้อย่างไร ฉันรู้ว่ามันน่าจะเป็นอะไรที่ง่าย ๆ แต่ฉันก็ไม่รู้ไวยากรณ์สำหรับมัน

คำตอบ #1

มันคือ:

this.http.get<Category[]>(this.endpoint).pipe(
  map(results => results.sort(...))
);

หรือเนื่องจาก sort ทำการแก้ไขอาร์เรย์ที่มีอยู่แล้ว จึงถูกต้องตามความหมายมากกว่าที่จะให้ผลกระทบข้างเคียงใน do/tap:

this.http.get<Category[]>(this.endpoint).pipe(
  tap(results => {
    results.sort()
  })
);

บทความที่เกี่ยวข้อง