Menu
CoddyTech

إزالة ملاحظة

جزء من قسم أساسيات 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)}`);
challenge icon

التحدي

سهل

عند الانتهاء من مهمة، علِّمها بأنها أُنجزت وستُزال من القائمة. أضف أمر done يزيل ملاحظة باستخدام رقمها.

  1. في notes.js، أضف أمر done. الكلمة التي تأتي بعد done هي رقم الملاحظة، كما يعرضه list، لذا فالملاحظة 1 هي الملاحظة الأولى. تصل الكلمة كسلسلة نصية.
  2. أزل تلك الملاحظة من المخزن، ثم احفظ الملاحظات في notes.json بالطريقة نفسها التي يحفظ بها add الملاحظات. تقع الملاحظة 1 عند الفهرس 0 في المصفوفة. يمكنك وضع شيفرة الإزالة في notes.js أو إضافتها كطريقة في store.js.
  3. اطبع Done: متبوعًا بنص الملاحظة التي أزلتها. عند وجود الملاحظات Buy milk وCall Ada وWater the plants، يطبع node notes.js done 1 ما يلي:
    Done: Buy milk
    ثم لا يحتوي notes.json إلا على Call Ada وWater the plants. يزيل done 3 الملاحظة Water the plants.
  4. إذا لم تكن الكلمة رقم ملاحظة، فلا تغيّر شيئًا. اطبع 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);
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس أساسيات Node.js

تدرّب بنفسك: Playground لـ Express