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}`);
}
});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.
notes.jsdosyasına birsearchkomutu ekle.searchkomutundan sonraki kelimeler aranacak metni belirtir.- Büyük-küçük harf fark etmeksizin arama metnini içeren her notu bul:
milk,MilkveMILKifadelerinin tümüBuy milknotunu bulur. - Her eşleşmeyi
formatNoteile yazdır; notunlistiçindeki numarasını kullan ki bu numarayıdoneveremindile kullanabilesin.settings.json,listkomutunda 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 breadnode notes.js search ADA, 2. Call Ada ifadesini yazdırır.
- Hiçbir not eşleşmediğinde,
No notes matchifadesini 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
1JavaScript’i Node Üzerinde Çalıştırma
Merhaba, NodeKomutu OkumaKomut Satırı ArgümanlarıKomutlarKendi başına pratik yap: Express playground