• בלוג
  • חדש ב JavaScript: פונקציות עזר לאיטרטורים

חדש ב JavaScript: פונקציות עזר לאיטרטורים

29/06/2025

אחת הפונקציות האהובות עליי ב JavaScript היא find. עם find אני יכול למצוא את האיבר הראשון במערך שמתאים לתנאי ולעצור כשמצאתי אותו, כלומר הקוד הזה מגריל 100 מספרים בין 0 ל 100 ומדפיס את הראשון מהם שגדול מ-50:

new Array(100).fill(0).map(i => Math.floor(Math.random() * 100)).find(p => p > 50)

אבל עדיין יש פה משהו צורם בקוד - בשביל מה היית צריך להמשיך להגריל מספרים אחרי שמצאת את הראשון שגדול מ-50? כתיב השורה אחת צריך לעבוד יותר קשה מכתיב הלולאה המקביל:

for (let i=0; i < 100; i++) {
  const r = Math.floor(Math.random() * 100)
  if (r > 50) { console.log(r); break; }
}

מה עושים? מתקנים את JavaScript כמובן כדי שאפשר יהיה לכתוב את כל הלולאות בשורה אחת ובלי עבודה מיותרת בעזרת פונקציות עזר לאיטרטורים - פיצ'ר חדש שנכנס כבר לכל הדפדפנים והתקבל לאיפיון של ES2025, וזה נראה ככה:

  1. הפונקציה values של מערך מחזירה איטרטור.
  2. לאיטרטור יש פונקציות כמו map, filter, take, drop שמשפיעות על מהלך האיטרציה.
  3. לאיטרטור יש פונקציית next שמחזירה את הערך הבא ממנו.

ולכן הלולאה נראית כך:

new Array(100).values().map(() => Math.floor(Math.random() * 100)).filter(i => i > 50).take(1).next().value

שורה אחת, מגרילה עד 100 מספרים ומחזירה את הראשון שגדול מ-50.

ואם אני רוצה את ה-3 מספרים הראשונים שגדולים מ-50? אין שום בעיה פשוט נשתמש ב toArray במקום ב next:

new Array(100).values().map(() => Math.floor(Math.random() * 100)).filter(i => i > 50).take(3).toArray()

את רשימת כל הפונקציות החדשות של איטרטורים אפשר למצוא בתיעוד בקישור:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator