javascript / intermediate
Snippet
Reaktives Filtern und Sortieren von Arrays anhand mehrerer Kriterien mit Signals
Die Verwendung von Computed Signals mit modernen unveränderlichen Array-Methoden wie `toSorted()` und `filter()` erzeugt deklarativen, automatisch aktualisierten abgeleiteten Zustand. Ändern sich Filter- oder Sortierkriterien, berechnet Angular die Array-Projektion neu, ohne die Ursprungsdaten zu mutieren.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import { Component, signal, computed } from '@angular/core';export interface Product {id: number;name: string;price: number;category: string;}@Component({selector: 'app-product-list',standalone: true,template: `<!-- Template renders sortedProducts() -->`})export class ProductListComponent {readonly products = signal<Product[]>([{ id: 1, name: 'Desk', price: 250, category: 'Furniture' },{ id: 2, name: 'Chair', price: 120, category: 'Furniture' },{ id: 3, name: 'Mouse', price: 45, category: 'Electronics' }]);readonly selectedCategory = signal<string>('Furniture');readonly sortDirection = signal<'asc' | 'desc'>('asc');readonly sortedProducts = computed(() => {const category = this.selectedCategory();const direction = this.sortDirection();return this.products().filter(item => item.category === category).toSorted((a, b) => direction === 'asc' ? a.price - b.price : b.price - a.price);});}
angular
Erklärung
1
readonly sortedProducts = computed(() => {
Deklariert ein abgeleitetes Signal, das Ergebnisse zwischenspeichert und bei Signaländerungen automatisch neu berechnet.
2
.filter(item => item.category === category)
Filtert die Produktliste passend zum aktuell ausgewählten Kategorie-Signalzustand.
3
.toSorted((a, b) => direction === 'asc' ? a.price - b.price : b.price - a.price);
Erzeugt eine sortierte Kopie des gefilterten Arrays anhand des Preises, ohne das Original-Array zu verändern.