ES2019 – יצירת אובייקטים ממערכים עם fromEntries

מתודה שימושית מאוד מהתקן החדש של ES2019 שמאפשרת להמיר בקלות מערכים לאובייקטים

אחד מהפיצ'רים החזקים ב-ES2019 הוא fromEntries – מתודה נהדרת וקלה להבנה שעוזרת מאוד בהמרה של מערכים לאובייקטים. למה אנחנו צריכים להמיר מערכים לאובייקטים? טוב, אם אתם מתממשקים ל-API שונים עם Middleware מבוסס node.js, אז אתם צריכים לבצע המרות כאלו. אם אתם מתממשקים באפליקצית הקליינט שלכם ל-API שאין לכם שליטה עליו, אז אתם צריכים לעשות המרות כאלו. אם אתם מייבאים קומפוננטה במקום מסוים (ולא משנה אם מדובר באנגולר, ריאקט או Vue) אז תצטרכו לבצע המרות כאלו.

התוספות האחרונות מתקן ES6 ומעלה מכילות כמה תוספות חשובות להמרות שעד כה שכנו להן בנחת בספרית lodash (ספריה אולטרא פופולרית שכדאי להכיר שמכילה כלי עזר לג'אווהסקריפט). תוספת חשובה כזו היא fromEntries. מה שהיא עושה זה לקחת מערך ולהחזיר אובייקט. הכי פשוט בעולם:

const children = [['Omri', 18], ['kfir', 12], ['Daniel', 9], ['Michal', 7]];
const childrenObject = Object.fromEntries(children);
console.log(childrenObject);
/* 
Object {
  Daniel: 9,
  kfir: 12,
  Michal: 7,
  Omri: 18
}
*/

אני מעביר מערך ונוצר ממנו אובייקט. הכי פשוט והכי כיפי בעולם.

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

הנה הדוגמה של השימוש, פה אני יוצא פונקצית חיפוש באובייקט שמחזירה לי את מה שאני רוצה מתוך אובייקט 'לקוח'. אפשר לראות איך אני ממיר את האובייקט למערך כדי שאוכל לעבוד איתו במתודות המערך filter ו-entries ואז ממיר אותו חזרה עם fromObject:

const customer = {
  firstName: 'Ran',
  lastName: 'Bar-Zik',
  street: 'Kaplan St',
  city: 'Petah Tiqwa',
  age: 42, 
}

function pick(object, ...keys) {
  const objectEntries = Object.entries(object);
  // [ ["firstName", "Ran"], ["lastName", "Bar-Zik"], ["street", "Kaplan St"], ["city", "Petah Tiqwa"], ["age", 42] ]
  const filteredEntries = objectEntries.filter(
    // This arrow function syntax returns the result
    ([key]) => keys.includes(key)
  );
  // [["firstName", "Ran"],  ["lastName", "Bar-Zik"]]
  return Object.fromEntries(filteredEntries);
}

let result = pick(customer, 'firstName', 'lastName'); // {firstName: "Ran", lastName: "Bar-Zik"}
result = pick(customer, 'city', 'street'); // {street: "Kaplan St", city: "Petah Tiqwa"}
result = pick(customer, 'age'); // {age: 42}

באמת קל ופשוט. פשוט תזכרו – יש לכם מערך? רוצים להמיר לאובייקט? אפשר לעשות את זה בקלות עם מה שהוסיפו ל-ES2019. הכל קל בעולם.

הערה חשובה: משתמשים בכרום לא עובד לכם? ודאו שאתם בכרום 73. בעולם האמיתי כמובן שמומלץ להשתמש ב babel.

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

SSG עם next

אחרי שלמדנו במאמר הקודם מה זה SSR והבנו שלא מדובר בקליע כסף שפותר את כל הבעיות שלנו, נלמד על SSG שיכול להקל על כמה מהבעיות של SSR.

מיקרו בקרים

בית חכם עם ESPHome ו Home Assistant

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

מיקרו בקרים

הפעלת מסך oled קטנטן עם esp32

יצירת מערכת מולטימדיה שלמה בגודל של בול דואר עם מיקרובקר ובעלות של דולרים בודדים. וגם על הדרך נלמד על ת׳רדים

גלילה לראש העמוד