v2.5.2
Giriş yap

Metin içi karakter bulma

eris
220 defa görüntülendi ve 3 kişi tarafından değerlendirildi
  function CHECK_PLAYER() {
    const lowercaseTitle = streamer.title.toLowerCase();
    for (let i = 0; i < streamer.characters.length; i++) {
      const character = streamer.characters[i];
      const lowercaseCharacterName = character.name.split(" ")[0].toLowerCase();
      if (
        lowercaseTitle.includes(lowercaseCharacterName) &&
        character.name.trim() !== ""
      ) {
        return character;
      }
    }
    return null;
  }

streamer.title : "Ata Kuzey | pazartesi salı..."
character.name : "Atalay Kuzey"

Yukarıdaki fonksiyon eğer başlığın içinde tam olarak "Atalay" var ise karakteri dönüyor fakat yukarıdaki örnekteki gibi başlık "Ata Kuzey" olunca null dönüyor. İstediğim şey .includes fonksiyonundan farklı olarak karakter adındaki "Atalay" zaten "Ata" içeriyor. Eğer durum böyle ise true yani karakteri dönmesini istiyorum. Bunu nasıl yapabilirim?

ebykdrms
158 gün önce

ChatGPT 3.5 ile biraz yazıştım. Yazışmamızın sonucu:

Esnek bir arama fonksiyonu oluşturmak için basit bir yaklaşım, terimlerin benzerliğini kontrol etmek için bir tür benzerlik ölçüsü kullanmaktır. Örneğin, iki metin arasındaki benzerliği Levenshtein mesafesi gibi bir ölçümle değerlendirebiliriz. Levenshtein mesafesi, iki metin arasındaki karakter dizisi farkını belirler.
Bu kodda, levenshteinDistance fonksiyonu iki metin arasındaki Levenshtein mesafesini hesaplar. flexibleSearch fonksiyonu, verilen sorgu ve alan adına göre, veri kümesindeki her bir öğe için benzerlik kontrolü yapar ve sonuçları döndürür.
Bu örnek, belirli bir benzerlik eşik değeri kullanır ve bu eşik değeri değiştirilebilir (3.parametre). Bu sayede, isteğe bağlı olarak daha sıkı veya daha gevşek bir eşik belirlenebilir.

// Veri
const data = [
  { id: 1, name: "John Doe", age: 30, city: "New York" },
  { id: 2, name: "Jane Smith", age: 25, city: "Los Angeles" },
  { id: 3, name: "Alice Johnson", age: 35, city: "Chicago" },
  { id: 4, name: "Ata Kuzey", age: 35, city: "Chicago" }
];

// Levenshtein mesafesi hesaplama fonksiyonu
function levenshteinDistance(a, b) {
  if (a.length === 0) return b.length;
  if (b.length === 0) return a.length;

  const matrix = [];

  // İlk satır ve sütunun başlangıç değerleri
  for (let i = 0; i <= b.length; i++) {
    matrix[i] = [i];
  }

  for (let j = 0; j <= a.length; j++) {
    matrix[0][j] = j;
  }

  // Levenshtein mesafesi hesaplama
  for (let i = 1; i <= b.length; i++) {
    for (let j = 1; j <= a.length; j++) {
      if (b.charAt(i - 1) === a.charAt(j - 1)) {
        matrix[i][j] = matrix[i - 1][j - 1];
      } else {
        matrix[i][j] = Math.min(
          matrix[i - 1][j - 1] + 1,
          matrix[i][j - 1] + 1,
          matrix[i - 1][j] + 1
        );
      }
    }
  }

  return matrix[b.length][a.length];
}

// Veriye esnek bir arama yapmak için fonksiyon
function flexibleSearch(query, field, threshold) {
  const results = [];
  for (const item of data) {
    // Levenshtein mesafesi hesaplayarak benzerlik kontrolü
    if (levenshteinDistance(query.toLowerCase(), item[field].toLowerCase()) <= threshold) {
      results.push(item);
    }
  }
  return results;
}

// Örnek kullanım
const searchResults = flexibleSearch("Atalay Kuzey", "name", 5);
console.log(searchResults); // [{"id": 4, "name": "Ata Kuzey", "age": 35,"city": "Chicago"}]