Menu
CoddyTech

Arama

Coddy'nin Node.js Journey'sinin Node.js Temelleri bölümünün bir parçası. Ders 32 / 33.

Birkaç düzine not olduğunda, list içinde kaydırarak gezinmek işe yaramaz: arama yapman gerekir.

Karşılaştırmadan önce her iki tarafı da küçük harfe dönüştür; böylece Milk, milk ve MILK eşleşir, ardından includes ile test et. Listenin tamamı üzerinde döngü kur ve her dizini koru; böylece eşleşme, list içindekiyle aynı numarayı gösterir ve bu numarayı done ile remind bekler.

const songs = ['Blue Moon', 'Moonlight', 'Sunny'];
const query = 'MOON'.toLowerCase();
songs.forEach((title, i) => {
    if (title.toLowerCase().includes(query)) {
        console.log(`${i + 1}. ${title}`);
    }
});
challenge icon

Görev

Kolay

Çok sayıda not olduğunda, list içinde gezinmek işe yaramaz hâle gelir. Notları bir kelimeye göre bulan bir search komutu ekle.

  1. notes.js dosyasına bir search komutu ekle. search komutundan sonraki kelimeler aranacak metni belirtir.
  2. Büyük-küçük harf fark etmeksizin arama metnini içeren her notu bul: milk, Milk ve MILK ifadelerinin tümü Buy milk notunu bulur.
  3. Her eşleşmeyi formatNote ile yazdır; notun list içindeki numarasını kullan ki bu numarayı done ve remind ile kullanabilesin. settings.json, list komutunda en yeni notları önce sıralasa bile eşleşmeleri en eskiden başlayarak, saklandıkları sırayla yazdır. Başlık yazdırma.

Buy milk, Call Ada ve buy bread notları varken, node notes.js search buy şunu yazdırır:

1. Buy milk
3. buy bread

node notes.js search ADA, 2. Call Ada ifadesini yazdırır.

  1. Hiçbir not eşleşmediğinde, No notes match ifadesini ve ardından arama metnini yazdır. node notes.js search tea şunu yazdırır:
    No notes match tea

Deneyin: $ node notes.js ifadesinden sonra kutuya search milk yazıp Enter tuşuna basın, ardından search MILK yazın: ikisi de aynı notları bulur. Sonra notlarınızın hiçbirinde bulunmayan bir kelimeyi arayın: No notes match ifadesini ve o kelimeyi görürsünüz.

Kendin dene

// Not aracınız burada başlıyor.
import { rmSync } from 'node:fs';
import path from 'node:path';
import { formatNote } from './format.js';
import stats from './legacy/stats.cjs';
import pkg from './package.json' with { type: 'json' };
import store from './store.js';

const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');

store.on('added', (note, n) => {
    console.log(`Saved note ${n}.`);
});

const noteNumber = (word) => {
    const n = Number(word);
    if (!Number.isInteger(n) || n < 1 || n > store.notes.length) {
        console.error(`No note ${word}`);
        process.exit(1);
    }
    return n;
};

if (command === 'add') {
    await store.add(text);
} else if (command === 'list') {
    const owner = process.env.NOTES_OWNER ?? 'you';
    console.log(`Notes for ${owner}`);
    if (store.notes.length === 0) {
        console.log('No notes yet');
    }
    const lines = store.notes.map((note, i) => formatNote(i + 1, note));
    if (store.settings.sort === 'newest') {
        lines.reverse();
    }
    lines.forEach((line) => console.log(line));
} else if (command === 'where') {
    const file = path.join(process.cwd(), 'notes.json');
    console.log(file);
    console.log(path.basename(file));
} else if (command === 'stats') {
    console.log(`${store.notes.length} notes, ${stats.countWords(store.notes)} words`);
} else if (command === 'done') {
    const removed = await store.remove(noteNumber(words[0]));
    console.log(`Done: ${removed}`);
} else if (command === 'remind') {
    const note = store.notes[noteNumber(words[0]) - 1];
    let count = 3;
    const timer = setInterval(() => {
        if (count > 0) {
            console.log(count);
            count -= 1;
        } else {
            console.log(note);
            clearInterval(timer);
        }
    }, 200);
} else if (command === 'import') {
    let input = '';
    for await (const chunk of process.stdin) {
        input += chunk;
    }
    const lines = input
        .split('\n')
        .map((line) => line.trim())
        .filter((line) => line !== '');
    for (const line of lines) {
        await store.add(line);
    }
    console.log(`Imported ${lines.length} notes.`);
} else if (command === 'version') {
    console.log(`${pkg.name} ${pkg.version}`);
} else if (command === 'clear') {
    rmSync('notes.json', { force: true });
    console.log('Deleted notes.json');
} else {
    if (command) {
        console.error(`Unknown command: ${command}`);
    }
    console.error('Usage: node notes.js <command> [words]');
    process.exit(1);
}

Node.js Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Express playground