CodeBlanks Logo Icon CodeBlanks

Görev tamamlama ve silme

JavaScript kursu · Başlangıç · Ders 103/133

findIndex ile görevi bulup tamamlar ve filter ile silersin.

findIndex ile konum bulmak

Bir görevin dizideki konumunu bulmak için findIndex metodunu kullanırız. Bu metod bir koşul fonksiyonu alır ve koşulu sağlayan ilk elemanın indeksini döndürür.

tasks.findIndex(function (task) { return task.id === id; }) çağrısı id'si eşleşen görevin konumunu verir. Hiç eşleşme yoksa -1 döner. Bu yüzden sonucu kullanmadan önce -1 kontrolü yapmalısın.

filter ile silmek

Bir görevi silmenin güvenli yolu filter metodudur. filter, koşulu sağlayan elemanlardan yeni bir dizi oluşturur ve orijinali değiştirmez. Silmek için koşulu ters çevirirsin.

tasks = tasks.filter(function (task) { return task.id !== id; }) yazdığında id'si eşleşmeyenler kalır, eşleşen çıkar. Sonucu tasks'a geri atamak diziyi günceller.

Değiştirme ve yeni dizi

Bir diziyi değiştirmenin iki yolu vardır: yerinde değiştirme (mutation) veya yeni dizi döndürme. push diziyi yerinde değiştirir; filter ise yeni bir dizi verir.

Bu yüzden filter sonucunu mutlaka bir değişkene atamalısın, yoksa değişiklik kaybolur. push için buna gerek yoktur. İki yaklaşımı doğru kullanmak hataları azaltır.

Uygulama Görevi tamamla ve sil

completeTask ve deleteTask adında iki fonksiyon tanımla. completeTask, findIndex ile görevi bulup completed değerini true yapsın; bulunamazsa hiçbir şey yapmasın. deleteTask, filter ile id'si eşleşmeyenleri tutup sonucu tasks'a atasın.

Örnek çözümü göster
completeTask findIndex ile konumu bulur ve completed true yapar. deleteTask filter ile id'si eşleşmeyenleri tutar.

Örnek çözüm:
function completeTask(id) {
  const index = tasks.findIndex(function (task) {
    return task.id === id;
  });
  if (index !== -1) {
    tasks[index].completed = true;
  }
}

function deleteTask(id) {
  tasks = tasks.filter(function (task) {
    return task.id !== id;
  });
}

Kendini test et

  1. findIndex eşleşme bulamazsa ne döndürür?

    • undefined
    • null
    • 0
    • -1
    Cevabı göster

    -1 — findIndex hiçbir eleman koşulu sağlamazsa -1 döndürür; bu yüzden sonucu kontrol etmelisin.

  2. filter koşulunu tamamla

    function deleteTask(id) {
      tasks = tasks.filter(function (task) {
        return task.id !== ____;
      });
    }
    Cevabı göster
    function deleteTask(id) {
      tasks = tasks.filter(function (task) {
        return task.id !== id;
      });
    }
  3. Metotları davranışlarıyla eşleştir

    findIndex
    Konumu döndürür
    filter
    Yeni dizi verir
    push
    Yerinde değiştirir

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