Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
JavaScript’te indexOf(), bir metnin veya dizinin içinde aranan değerin ilk bulunduğu konumu bulur. Sonuç, sıfırdan başlayan bir indeks numarasıdır. Değer bulunamazsa -1 döner. Bu nedenle en yaygın kullanım, bir değerin mevcut olup olmadığını kontrol etmektir.

String ve Array üzerinde kullanımı​


string.indexOf(aranan) metin içindeki ilk eşleşmenin başlangıç indeksini verir. Büyük-küçük harf duyarlıdır. array.indexOf(aranan) ise dizide aranan elemanın ilk eşleştiği konumu döndürür.

Kod:
const metin = "JavaScript öğreniyorum";
const konum = metin.indexOf("Script");

console.log(konum); // 4
console.log(metin.indexOf("Python")); // -1

const diller = ["HTML", "CSS", "JavaScript", "JavaScript"];
console.log(diller.indexOf("JavaScript")); // 2

Metindeki indeks, eşleşen parçanın ilk karakterini gösterir. Örneğin JavaScript içinde Script ifadesi 4. indeksten, yani sıfırdan sayıldığı için beşinci karakterden başlar; çünkü J karakterinin indeksi 0’dır. Dizide ise indeks, elemanın bulunduğu sıra numarasıdır.

Sonuç nasıl yorumlanır?​


indexOf() sonucu doğrudan koşulda kullanılabilir; ancak yalnızca if (sonuc) biçimindeki kontrol hatalıdır. Çünkü bulunan değer ilk sıradaysa sonuç 0 olur ve JavaScript bunu yanlış kabul eder. Doğru kontrol, sonucu -1 ile karşılaştırmaktır.

Kod:
const roller = ["admin", "editor", "uye"];
const arananRol = "admin";

if (roller.indexOf(arananRol) !== -1) {
  console.log("Rol listede bulunuyor.");
} else {
  console.log("Rol listede bulunmuyor.");
}

Bu örnekte sonuç 0 olsa bile koşul doğru çalışır. Yalnızca elemanın konumu gerekiyorsa dönen indeksi saklayıp sonraki işlemde kullanabilirsiniz.

Arama başlangıç konumunu belirleme​


İkinci parametre olan fromIndex, aramanın hangi indeksten başlayacağını belirtir. Bu parametre verilmezse arama 0. indeksten başlar. Böylece ilk eşleşmeyi atlayarak sonraki eşleşmeyi arayabilirsiniz.

Kod:
const sayilar = [10, 20, 10, 30];

console.log(sayilar.indexOf(10)); // 0
console.log(sayilar.indexOf(10, 1)); // 2

İlk çağrı 0. indeksteki 10 değerini bulur. İkinci çağrı ise 1. indeksten itibaren arama yaptığı için 2. indeksteki değeri döndürür. Metinlerde de aynı yaklaşım geçerlidir.

Arama yöntemini seçerken temel farklar şöyledir:

İhtiyaçUygun kullanımSonuç
İlk eşleşmenin konumuindexOf()İndeks veya -1
Değerin bulunup bulunmadığıindexOf() !== -1true veya false mantığı
Son eşleşmenin konumulastIndexOf()Son indeks veya -1
Koşula uyan elemanı aramafindIndex()Koşulu sağlayan indeks veya -1

Sık yapılan hatalar ve sınırlamalar​


indexOf() eşleşmeyi büyük-küçük harfe duyarlı arar. "JavaScript".indexOf("javascript") sonucu bu nedenle -1 olur. Büyük-küçük harfi önemsemeyen arama gerekiyorsa karşılaştırmadan önce iki tarafı da toLowerCase() veya uygun bir metin normalleştirme yöntemiyle dönüştürün.

Dizi aramasında değerler katı eşitlik mantığıyla karşılaştırılır. Bu yüzden NaN için indexOf() beklenen eşleşmeyi vermez. Ayrıca nesnelerde içerik değil, aynı nesne referansı aranır:

Kod:
const birinci = { id: 1 };
const ikinci = { id: 1 };

console.log([birinci].indexOf(birinci)); // 0
console.log([birinci].indexOf(ikinci)); // -1

İki nesnenin id değeri aynı olsa da nesneler farklı referanslardır. Nesne özelliğine göre arama yapmak için findIndex() gibi koşullu bir yöntem kullanın. Büyük bir dizide tekrar tekrar arama yapılıyorsa ve yalnızca üyelik kontrolü gerekiyorsa Set.has() daha uygun bir veri yapısı olabilir; konum gerekiyorsa indexOf() kullanmaya devam edin.

Sık sorulan sorular​

Negatif başlangıç değeri sondan geriye arama mı yapar?​

Dizide hayır: negatif fromIndex, uzunluğa eklenerek başlangıç konumuna çevrilir ve arama yine ileri gider. Örneğin [10,20,10,30].indexOf(10,-2) sonucu 2’dir. String.indexOf ise negatif başlangıcı 0 kabul eder. Aynı yöntem adına bakıp bu iki alıcı türünün bütün parametre kurallarını aynı sanmayın.

Emoji bulunan metinde indeks neden görünen harf sayısına uymuyor?​

JavaScript metin indeksleri UTF-16 kod birimlerine dayanır. Bazı emojiler iki kod birimi, birleşik görünen işaretler ise daha fazla birim içerebilir. Örneğin "😀a".indexOf("a") sonucu 2’dir. İndeksi kullanıcıya görünen karakter sayısı gibi yorumlamayın; arayüzde karakter düzeyinde işlem gerekiyorsa Unicode metin bölütleme ihtiyacını ayrıca ele alın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic