إزالة ملاحظة
جزء من قسم أساسيات Node.js في رحلة Node.js على Coddy. الدرس 15 من 33.
ينبغي أن يؤدي done 2 إلى إزالة الملاحظة 2، ويمكن للناس كتابة أي شيء بعد done.
الوسائط سلاسل نصية: Number('2') تساوي 2، وNumber('two') تساوي NaN. يرفض Number.isInteger كلًا من NaN و2.5 في اختبار واحد؛ ثم تحقّق من النطاق. تبدأ القوائم العد من 1، والمصفوفات من 0، لذا تكون الملاحظة n عند الفهرس n - 1، وتحذفها splice(i, 1).
// node seat.js 4
const seat = Number(process.argv[2]);
if (!Number.isInteger(seat) || seat < 1 || seat > 30) {
console.error(`No seat ${process.argv[2]}`);
process.exit(1);
}
console.log(`Row ${Math.ceil(seat / 6)}`);التحدي
سهلعند الانتهاء من مهمة، علِّمها بأنها أُنجزت وستُزال من القائمة. أضف أمر done يزيل ملاحظة باستخدام رقمها.
- في
notes.js، أضف أمرdone. الكلمة التي تأتي بعدdoneهي رقم الملاحظة، كما يعرضهlist، لذا فالملاحظة 1 هي الملاحظة الأولى. تصل الكلمة كسلسلة نصية. - أزل تلك الملاحظة من المخزن، ثم احفظ الملاحظات في
notes.jsonبالطريقة نفسها التي يحفظ بهاaddالملاحظات. تقع الملاحظة 1 عند الفهرس 0 في المصفوفة. يمكنك وضع شيفرة الإزالة فيnotes.jsأو إضافتها كطريقة فيstore.js. - اطبع
Done:متبوعًا بنص الملاحظة التي أزلتها. عند وجود الملاحظاتBuy milkوCall AdaوWater the plants، يطبعnode notes.js done 1ما يلي:ثم لا يحتويDone: Buy milknotes.jsonإلا علىCall AdaوWater the plants. يزيلdone 3الملاحظةWater the plants. - إذا لم تكن الكلمة رقم ملاحظة، فلا تغيّر شيئًا. اطبع
No noteمتبوعًا بالكلمة إلى stderr، واخرج برمز 1. ينطبق ذلك على كلمة مثلabc، أو0، أو عدد عشري مثل2.5، أو رقم يتجاوز عدد الملاحظات، مثل9عندما تكون هناك ثلاث ملاحظات. يطبعnode notes.js done abcما يلي باللون الأحمر:No note abc
جرّب ذلك: اكتب list في المربع بعد $ node notes.js لرؤية ملاحظاتك وأرقامها. اكتب done 1، ثم list مجددًا: ستختفي الملاحظة الأولى وتتحرك الملاحظات الأخرى إلى أعلى برقم واحد. ثم اكتب done abc: سترى No note abc باللون الأحمر ورمز الخروج 1، وسيعرض list الملاحظات نفسها التي كانت موجودة من قبل.
جرّب بنفسك
// تبدأ أداة الملاحظات الخاصة بك هنا.
import { rmSync } from 'node:fs';
import path from 'node:path';
import { formatNote } from './format.js';
import stats from './legacy/stats.cjs';
import store from './store.js';
const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');
if (command === 'add') {
const n = store.add(text);
console.log(`Saved note ${n}.`);
} 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');
}
store.notes.forEach((note, i) => console.log(formatNote(i + 1, note)));
} 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 === '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
1تشغيل JavaScript على Node
مرحبًا يا Nodeقراءة الأمروسائط سطر الأوامرالأوامرتدرّب بنفسك: Playground لـ Express