Pencarian
Termasuk bagian Dasar-Dasar Node.js dalam perjalanan Node.js di Coddy. Pelajaran 32 dari 33.
Dengan beberapa lusin catatan, menggulir list tidak lagi efektif: kamu perlu mencari.
Ubah kedua sisi menjadi huruf kecil sebelum membandingkannya, agar Milk, milk, dan MILK semuanya cocok, lalu uji dengan includes. Lakukan perulangan pada seluruh list dan simpan setiap indeks, agar hasil yang cocok menampilkan nomor yang sama seperti di list, nomor yang diharapkan oleh done dan remind.
const songs = ['Blue Moon', 'Moonlight', 'Sunny'];
const query = 'MOON'.toLowerCase();
songs.forEach((title, i) => {
if (title.toLowerCase().includes(query)) {
console.log(`${i + 1}. ${title}`);
}
});Tantangan
MudahJika catatanmu banyak, menggulir list tidak lagi praktis. Tambahkan perintah search untuk mencari catatan berdasarkan kata.
- Di
notes.js, tambahkan perintahsearch. Kata-kata setelahsearchadalah kata yang akan dicari. - Cari setiap catatan yang memuat teks pencarian, tanpa membedakan huruf besar dan kecil:
milk,Milk, danMILKsemuanya menemukanBuy milk. - Cetak setiap hasil yang cocok dengan
formatNote, menggunakan nomor catatan yang ditampilkan dilist, agar kamu bisa menggunakan nomor itu dengandonedanremind. Cetak hasil yang cocok dari yang paling lama, sesuai urutan penyimpanannya, meskipunsettings.jsonmengurutkanlistdari yang terbaru terlebih dahulu. Jangan cetak judul.
Dengan catatan Buy milk, Call Ada, dan buy bread, node notes.js search buy mencetak:
1. Buy milk
3. buy breadnode notes.js search ADA mencetak 2. Call Ada.
- Jika tidak ada catatan yang cocok, cetak
No notes matchdiikuti teks pencarian.node notes.js search teamencetak:No notes match tea
Coba: ketik search milk di kotak setelah $ node notes.js lalu tekan Enter, kemudian ketik search MILK: keduanya menemukan catatan yang sama. Lalu cari kata yang tidak ada di catatanmu: kamu akan melihat No notes match dan kata tersebut.
Coba sendiri
// Alat pencatatmu dimulai di sini.
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);
}
Semua pelajaran di Dasar-Dasar Node.js
1Menjalankan JavaScript di Node
Halo, NodeMembaca PerintahArgumen Baris PerintahPerintah5Peristiwa, Input, dan Package
Dengarkan Sebelum MengirimkanPemancar PeristiwaMembaca InputLatihan sendiri: Playground Express