דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ביצוע פעולה על מערך ששמו מגיע מהארגומנט (של הפונקציה)

ביצוע פעולה על מערך ששמו מגיע מהארגומנט (של הפונקציה)

מתוזמן נעוץ נעול הועבר תכנות
12 פוסטים 3 כותבים 268 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • צדיק תמיםצ צדיק תמים

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

    let arrayListServerItems = [9, 5, 4];
    let arrayListUserItems = [1, 2, 3];
    function claerArrayListItems(TypeList) {
      `arrayList${TypeList}Items`.length = 0;
    }
    claerArrayListItems("User");
    console.log(arrayListUserItems);
    

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

    yossizY מנותק
    yossizY מנותק
    yossiz
    כתב ב נערך לאחרונה על ידי yossiz
    #2

    @צדיק-תמים אין דרך נורמלית לעשות דבר כזה ב-JS. (יש דרך לא נורמלית, אבל אל תעשה את זה... eval(`arrayList${TypeList}Items`).length = 0).
    בד"כ, או שמעבירים את האובייקט עצמו שעליו אתה רוצה לבצע את הפעולה. או ששמים את שני הדברים בתוך אובייקט נוסף שממפה { שם (=מפתח) ↔ לערך } ומעבירים את המפתח.

    דוגמאות:

    // דרך 1
    let arrayListServerItems = [9, 5, 4];
    let arrayListUserItems = [1, 2, 3];
    function clearArrayListItems(list) {
      list.length = 0;
    }
    clearArrayListItems(arrayListUserItems);
    console.log(arrayListUserItems);
    
    // דרך 2
    const arrays = {
     arrayListServerItems: [9, 5, 4];
     arrayListUserItems: [1, 2, 3];
    }
    function clearArrayListItems(TypeList) {
      arrays[`arrayList${TypeList}Items`].length = 0;
    }
    clearArrayListItems("User");
    console.log(arrayListUserItems);
    

    נ.ב. מקובל יותר ל"נקות" מערך ככה: arr = []
    ואם כן תצטרך להשתמש בדרך השניה.

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    צדיק תמיםצ תגובה 1 תגובה אחרונה
    5
    • yossizY yossiz

      @צדיק-תמים אין דרך נורמלית לעשות דבר כזה ב-JS. (יש דרך לא נורמלית, אבל אל תעשה את זה... eval(`arrayList${TypeList}Items`).length = 0).
      בד"כ, או שמעבירים את האובייקט עצמו שעליו אתה רוצה לבצע את הפעולה. או ששמים את שני הדברים בתוך אובייקט נוסף שממפה { שם (=מפתח) ↔ לערך } ומעבירים את המפתח.

      דוגמאות:

      // דרך 1
      let arrayListServerItems = [9, 5, 4];
      let arrayListUserItems = [1, 2, 3];
      function clearArrayListItems(list) {
        list.length = 0;
      }
      clearArrayListItems(arrayListUserItems);
      console.log(arrayListUserItems);
      
      // דרך 2
      const arrays = {
       arrayListServerItems: [9, 5, 4];
       arrayListUserItems: [1, 2, 3];
      }
      function clearArrayListItems(TypeList) {
        arrays[`arrayList${TypeList}Items`].length = 0;
      }
      clearArrayListItems("User");
      console.log(arrayListUserItems);
      

      נ.ב. מקובל יותר ל"נקות" מערך ככה: arr = []
      ואם כן תצטרך להשתמש בדרך השניה.

      צדיק תמיםצ מנותק
      צדיק תמיםצ מנותק
      צדיק תמים
      כתב ב נערך לאחרונה על ידי צדיק תמים
      #3

      אכן הדרך של המיפוי כאובייקט נראית לי הכי אלגנטית, אבל לשם הרחבת הידע-
      @yossiz אמר בביצוע פעולה על מערך ששמו מגיע מהארגומנט (של הפונקציה):

      יש דרך לא נורמלית, אבל אל תעשה את זה...
      eval(`arrayList${TypeList}Items`).length = 0

      גם אם הTypeList מגיע מהקוד עצמו ולא מהמשתמש? (כלומר בקוד מוגדר שכפתור X קורא לפונקציה עם ארגומנט "X", וכפתור Z קורא לפונקציה עם ארגומנט "Z", ולא שהמשתמש מזין את שם הרשימה בדרך כלשהיא)

      Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
      טיפים

      yossizY 2 תגובות תגובה אחרונה
      1
      • צדיק תמיםצ צדיק תמים

        אכן הדרך של המיפוי כאובייקט נראית לי הכי אלגנטית, אבל לשם הרחבת הידע-
        @yossiz אמר בביצוע פעולה על מערך ששמו מגיע מהארגומנט (של הפונקציה):

        יש דרך לא נורמלית, אבל אל תעשה את זה...
        eval(`arrayList${TypeList}Items`).length = 0

        גם אם הTypeList מגיע מהקוד עצמו ולא מהמשתמש? (כלומר בקוד מוגדר שכפתור X קורא לפונקציה עם ארגומנט "X", וכפתור Z קורא לפונקציה עם ארגומנט "Z", ולא שהמשתמש מזין את שם הרשימה בדרך כלשהיא)

        yossizY מנותק
        yossizY מנותק
        yossiz
        כתב ב נערך לאחרונה על ידי yossiz
        #4

        @צדיק-תמים כן, השימוש ב-eval ירים גבות, גם אם במקרה הזה זה אולי לא כל כך נורא. זה תבנית קוד לא מקובלת.

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        תגובה 1 תגובה אחרונה
        3
        • צדיק תמיםצ צדיק תמים

          אכן הדרך של המיפוי כאובייקט נראית לי הכי אלגנטית, אבל לשם הרחבת הידע-
          @yossiz אמר בביצוע פעולה על מערך ששמו מגיע מהארגומנט (של הפונקציה):

          יש דרך לא נורמלית, אבל אל תעשה את זה...
          eval(`arrayList${TypeList}Items`).length = 0

          גם אם הTypeList מגיע מהקוד עצמו ולא מהמשתמש? (כלומר בקוד מוגדר שכפתור X קורא לפונקציה עם ארגומנט "X", וכפתור Z קורא לפונקציה עם ארגומנט "Z", ולא שהמשתמש מזין את שם הרשימה בדרך כלשהיא)

          yossizY מנותק
          yossizY מנותק
          yossiz
          כתב ב נערך לאחרונה על ידי
          #5

          @צדיק-תמים עיין כאן עוד סיבות לא להשתמש ב-eval

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          צדיק תמיםצ תגובה 1 תגובה אחרונה
          1
          • yossizY yossiz

            @צדיק-תמים עיין כאן עוד סיבות לא להשתמש ב-eval

            צדיק תמיםצ מנותק
            צדיק תמיםצ מנותק
            צדיק תמים
            כתב ב נערך לאחרונה על ידי
            #6

            @yossiz המתרגם של הכרום לא אוהב את הדף שהבאת משום מה... הוא לא ממש מתרגם אותו, ואם אני מפעיל את הסימניה שמתקנת את הRTL הוא בכלל מתרגז ומבטל את כל התרגום שכבר היה... 😒

            Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
            טיפים

            yossizY תגובה 1 תגובה אחרונה
            0
            • צדיק תמיםצ צדיק תמים

              @yossiz המתרגם של הכרום לא אוהב את הדף שהבאת משום מה... הוא לא ממש מתרגם אותו, ואם אני מפעיל את הסימניה שמתקנת את הRTL הוא בכלל מתרגז ומבטל את כל התרגום שכבר היה... 😒

              yossizY מנותק
              yossizY מנותק
              yossiz
              כתב ב נערך לאחרונה על ידי
              #7

              @צדיק-תמים יש שם הסבר למה השימוש ב-eval גרוע מאוד לביצועים

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              dovidD תגובה 1 תגובה אחרונה
              2
              • yossizY yossiz

                @צדיק-תמים יש שם הסבר למה השימוש ב-eval גרוע מאוד לביצועים

                dovidD מחובר
                dovidD מחובר
                dovid
                ניהול
                כתב ב נערך לאחרונה על ידי dovid
                #8

                @yossiz כמו תמיד הנושא הטכנולוגי תפס אותך יותר מאשר הצורך...

                @צדיק-תמים שים את המערכים באובייקט:

                arrays = {};
                arrays.ListServerItems = [9, 5, 4];
                arrays.ListUserItems = [1, 2, 3];
                function claerArrayListItems(TypeList) {
                  arrays[`List${TypeList}Items`] = [];
                }
                claerArrayListItems("User");
                console.log(arrayListUserItems);
                
                
                • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                צדיק תמיםצ תגובה 1 תגובה אחרונה
                0
                • dovidD dovid

                  @yossiz כמו תמיד הנושא הטכנולוגי תפס אותך יותר מאשר הצורך...

                  @צדיק-תמים שים את המערכים באובייקט:

                  arrays = {};
                  arrays.ListServerItems = [9, 5, 4];
                  arrays.ListUserItems = [1, 2, 3];
                  function claerArrayListItems(TypeList) {
                    arrays[`List${TypeList}Items`] = [];
                  }
                  claerArrayListItems("User");
                  console.log(arrayListUserItems);
                  
                  
                  צדיק תמיםצ מנותק
                  צדיק תמיםצ מנותק
                  צדיק תמים
                  כתב ב נערך לאחרונה על ידי צדיק תמים
                  #9

                  @dovid אני דווקא בעד... 🙂
                  ואסביר: כשאני כותב פה שאלה (כמעט תמיד) זה לא רק בשביל לדעת איך אני עכשיו מעיף את הבעיה הזאת וממשיך כבר לשורה הבאה של הקוד. כמובן אני כותב כאן כי נתקעתי בזה, ואני רוצה להתקדם, אבל לקבל "קביים" חד-פעמיים זה קצת חבל...
                  ולכן תשובה טובה בשבילי זה תשובה שמכילה קודם כל את הפתרון הבסיסי (יותר בקצרה) - כי בכל זאת, לפעמים יש שטח שקשה ללכת וצריך קביים 🙃, אבל גם חלק יותר מעמיק ומפורט - להרחבת הידע בנושא הספציפי... כדי שפעם הבאה שאתקל בבבעיה כזו בוואריאציה מעט שונה, אבין להקביל בין המקרים...
                  לדעתי @yossiz עשה את זה באופן מעולה ומושלם למדיי.

                  Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                  טיפים

                  dovidD תגובה 1 תגובה אחרונה
                  4
                  • צדיק תמיםצ צדיק תמים

                    @dovid אני דווקא בעד... 🙂
                    ואסביר: כשאני כותב פה שאלה (כמעט תמיד) זה לא רק בשביל לדעת איך אני עכשיו מעיף את הבעיה הזאת וממשיך כבר לשורה הבאה של הקוד. כמובן אני כותב כאן כי נתקעתי בזה, ואני רוצה להתקדם, אבל לקבל "קביים" חד-פעמיים זה קצת חבל...
                    ולכן תשובה טובה בשבילי זה תשובה שמכילה קודם כל את הפתרון הבסיסי (יותר בקצרה) - כי בכל זאת, לפעמים יש שטח שקשה ללכת וצריך קביים 🙃, אבל גם חלק יותר מעמיק ומפורט - להרחבת הידע בנושא הספציפי... כדי שפעם הבאה שאתקל בבבעיה כזו בוואריאציה מעט שונה, אבין להקביל בין המקרים...
                    לדעתי @yossiz עשה את זה באופן מעולה ומושלם למדיי.

                    dovidD מחובר
                    dovidD מחובר
                    dovid
                    ניהול
                    כתב ב נערך לאחרונה על ידי dovid
                    #10

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

                    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                    צדיק תמיםצ תגובה 1 תגובה אחרונה
                    3
                    • dovidD dovid

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

                      צדיק תמיםצ מנותק
                      צדיק תמיםצ מנותק
                      צדיק תמים
                      כתב ב נערך לאחרונה על ידי
                      #11

                      @dovid לא דיברתי על האזכור של eval כן או לא, אלא על התמצות/קצרנות - @yossiz הביא 2 דרכים לפתור את הבעיה שהעיליתי, והזכיר בדרך אגב את eval בדרך השלילה (שעל זה אפשר לדון האם זה נכון או לא, נראה לי שכן כי אני הרי הכרתי את eval, רק עוד לא חשבתי על השימוש בו בהקשר זה...), ואני ניצלתי זאת כדי לוודא באמת את מידת השלילה של השימוש בזה (באופן כללי).
                      לעומת זאת התשובה הזו שלך אמנם השמיטה את הeval, אך על הדרך גם את שאר הפירוט... וקצת חבל
                      ואני הבנתי שעל זה כיוונת (שאין עניין להרחיב בשתי הדרכים האחרות), ועל זה היתה תגובתי...

                      Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                      טיפים

                      dovidD תגובה 1 תגובה אחרונה
                      4
                      • צדיק תמיםצ צדיק תמים

                        @dovid לא דיברתי על האזכור של eval כן או לא, אלא על התמצות/קצרנות - @yossiz הביא 2 דרכים לפתור את הבעיה שהעיליתי, והזכיר בדרך אגב את eval בדרך השלילה (שעל זה אפשר לדון האם זה נכון או לא, נראה לי שכן כי אני הרי הכרתי את eval, רק עוד לא חשבתי על השימוש בו בהקשר זה...), ואני ניצלתי זאת כדי לוודא באמת את מידת השלילה של השימוש בזה (באופן כללי).
                        לעומת זאת התשובה הזו שלך אמנם השמיטה את הeval, אך על הדרך גם את שאר הפירוט... וקצת חבל
                        ואני הבנתי שעל זה כיוונת (שאין עניין להרחיב בשתי הדרכים האחרות), ועל זה היתה תגובתי...

                        dovidD מחובר
                        dovidD מחובר
                        dovid
                        ניהול
                        כתב ב נערך לאחרונה על ידי
                        #12

                        @צדיק-תמים אני מתבייש מאוד, לא קראתי כנראה את הפוסט של יוסי עד הסוף...
                        אתה צודק לגמרי.

                        • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                        • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                        תגובה 1 תגובה אחרונה
                        8
                        • dovidD dovid העביר נושא זה מ-תכנות ב-
                        תגובה
                        • תגובה כנושא
                        התחברו כדי לפרסם תגובה
                        • מהישן לחדש
                        • מהחדש לישן
                        • הכי הרבה הצבעות


                        בא תתחבר לדף היומי!
                        • התחברות

                        • אין לך חשבון עדיין? הרשמה

                        • התחברו או הירשמו כדי לחפש.
                        • פוסט ראשון
                          פוסט אחרון
                        0
                        • דף הבית
                        • קטגוריות
                        • פוסטים אחרונים
                        • משתמשים
                        • חיפוש
                        • חוקי הפורום