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. אם המילה אינה מספר של פתק, אל תשנו דבר. הדפיסו ל־stderr את No note ואחריו את המילה, וצאו עם קוד 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

תרגלו בעצמכם: Express אונליין