קורס JavaScript for Developers שיעור תרגיל מערכים ואובייקטים


זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/javascript/lessons/%D7%AA%D7%A8%D7%92%D7%99%D7%9C-%D7%9E%D7%A2%D7%A8%D7%9B%D7%99%D7%9D-%D7%95%D7%90%D7%95%D7%91%D7%99%D7%99%D7%A7%D7%98%D7%99%D7%9D

בפתרון התרגיל uniq נראה שיש פתרון פשוט יותר.
הלולאה עוברת על הארגומנטים שהתקבלו
ובגוף הלולאה שורה אחת: results[key]= 1
הפונציה תחזיר את הערך results.length

להבנתי, הבדיקה האם הערך כבר נראה קודם, מיותרת
איפה אני טועה?

הי,

אם הבנתי אותך נכון - התכוונת שהפונקציה תחזיר את הערך:

Object.keys(results)

ולא את length (כי מה שמעניין אותנו זה מי הערכים היחודיים ולא כמה ערכים ייחודיים היו.

הבעיה עם הגישה הזו שאתה מאבד את סדר המילים. לפעמים רשימת המפתחות של האוביקט תגיע לפי סדר הכנסה אבל זה לא מובטח. בפיתרון שהוצג הסדר נשמר, למרות שאני מסכים שאם הסדר לא חשוב אין צורך לשמור גם מערך וגם אוביקט.

תודה לתגובה מהירה.
אני מקווה שהבנתי נכון.
התכוונתי לייצר משתנה (מערך) מקומי שעבור כל מילת קלט
נוספת הגדרת entry למערך עם הערך 1 (שרירותי).
כמובן שמילים חוזרות יתמפו לאותה כניסה.

ואז אוכל להחזיר את “אורך” המערך המקומי שיצרתי.

זה אפשרי ב JS? זה נראה מתבקש מהשעורים שלך… (אגב,מעולים! אתה מסביר יופי רק לצערי לא מספיק לעומק)

אורך הוא תמיד מספר - אז אם מה שמעניין אותך זו רשימת המילים עצמה לא יעזור להחזיר אורך

כן אפשר להשתמש באוביקט לצורך זה, למשל בדוגמא הבאה שמדפיסה טבלת תדירויות הופעת מילים:

function uniq(words) {
  var freq = {};

  for (word of words) {
    freq[word] = freq[word] || 0;
    freq[word] += 1;
  }

  console.dir(freq);
}

uniq(['who', 'who', 'who', 'is', 'the', 'nice', 'is', 'person']);

// Prints:
// { who: 3, is: 2, the: 1, nice: 1, person: 1 }

אבל חייבים את המערך כדי לשמור על הסדר, מאחר ואוביקט לא זוכר באיזה סדר הוכנסו המילים.

ואגב לגבי העומק - סבלנות. יש עוד הרבה המשך לקורס ואי אפשר להפיל את כל החומר במכה אחת. נדמה לי שתשנה את דעתך בפרקים המתקדמים יותר (ואם לא מוזמן לשתף איזה נושאים עוד היית רוצה לראות ואשמח להוסיף).

במקור התכוונתי להחזיר מספר - ואם זו לא מטרת התרגיל (כבר איני זוכר) אז טעות שלי.
בכל מקרה תודה לתשובותיך המהירות

לייק 1