CodeBlanks Logo Icon CodeBlanks

Filtreleme

Duruma göre görev filtrelemeyi öğrenirsin.

filterByStatus fonksiyonu

filterByStatus, görevleri durumlarına göre süzer. filter metodu, koşula uyan öğeleri içeren yeni bir dizi döndürür; orijinal dizi değişmez.

function filterByStatus(todos: Todo[], status: Status): Todo[] {
  return todos.filter(t => t.status === status);
}

filter sonucunu kullanmak

filter her zaman yeni bir dizi döndürür; orijinal todos değişmez. Bu yüzden sonucu yeni bir değişkene ataman gerekir.

const active = todos.filter(t => t.status === "active");
// active: Todo[] (sadece active olanlar)

Bu listede yalnızca "active" durumdaki görevler yer alır.

Uygulama filterByStatus fonksiyonu yaz

Status ve Todo tanımla. addTodo, completeTodo ve listTodos fonksiyonlarını yaz. filterByStatus(todos: Todo[], status: Status): Todo[] fonksiyonu yaz: filter ile t.status === status koşuluna uyanları döndür. "Süt al" ve "Ekmek al" görevlerini ekle, birini ("1") tamamla, "active" olanları filtrele ve listele.

Başlangıç kodu

index.ts
// Status ve Todo tanımla
// addTodo ve completeTodo fonksiyonlarını yaz
// filterByStatus(todos: Todo[], status: Status): Todo[] yaz
// iki görev ekle, birini tamamla, "active" olanları filtrele ve listele

Örnek çözüm

index.ts
type Status = "active" | "completed";
interface Todo { id: string; title: string; status: Status; }

function addTodo(todos: Todo[], title: string): Todo[] {
  const todo: Todo = { id: String(todos.length + 1), title, status: "active" };
  todos.push(todo);
  return todos;
}

function completeTodo(todos: Todo[], id: string): void {
  const todo = todos.find(t => t.id === id);
  if (todo) {
    todo.status = "completed";
  }
}

function filterByStatus(todos: Todo[], status: Status): Todo[] {
  return todos.filter(t => t.status === status);
}

function listTodos(todos: Todo[]): void {
  todos.forEach(t => console.log(t.id + ": " + t.title + " [" + t.status + "]"));
}

const todos: Todo[] = [];
addTodo(todos, "Süt al");
addTodo(todos, "Ekmek al");
completeTodo(todos, "1");
const active = filterByStatus(todos, "active");
listTodos(active);

Beklenen çıktı

2: Ekmek al [active]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 filter metodu ne döndürür?

  • number
  • void
  • Yeni bir Todo[] Doğru cevap
  • Tek bir Todo

Açıklama: filter, koşula uyan tüm öğeleri içeren yeni bir dizi döndürür. Orijinal dizi değişmez; sonuç yeni bir değişkene atanır.

2 filter koşulunu tamamla

Soru
return todos.filter(t => t.status === ____);
Cevap
return todos.filter(t => t.status === status);

Açıklama: filter, parametre olarak gelen status ile karşılaştırma yapar: t.status === status. title string değil Status'ta yok, id yanlış alan, todo ise bir nesnedir.

3 Filtreleme parçaları

Kavram Anlamı
filter Koşula uyanları al
t.status === status Durum karşılaştırması
Todo[] (dönüş) Filtrelenmiş liste
filterByStatus Duruma göre filtrele

Başlangıç bölümündeki tüm dersler