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

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

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

שימוש באובייקט שנשאר ברקע ומשתנה, באופן ששינוי בו לא ישתקף באובייקטים אחרים שהורשו ממנו

מתוזמן נעוץ נעול הועבר תכנות
8 פוסטים 4 כותבים 665 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • chagoldC מנותק
    chagoldC מנותק
    chagold
    כתב ב נערך לאחרונה על ידי chagold
    #1

    אני מקוה להיות מספיק מובן, כיון שזה מסובך מאד להציג את זה בJSFIDDLE

    מדובר על js.

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

    ראשית עשיתי 2 מערכים.
    1 שבו נכנס רשימת האנשים שישלח אליהם המייל, (arr-mambers)
    2 רשימת הקבצים שיצורפו לכל אחד מהמיילים (arr-files).
    ועכשיו יש מערך שלישי (arr-data)- שכל איבר שלו הוא אובייקט המכיל את נתוני האנשים אליהם ישלח המייל, וכן נתוני הקבצים. וכאשר נוצר איבר, אני יכול לערוך את נתוני המייל הבא.

    הבעיה, שכשאני מצרף את נתוני המערך arr-files למערך arr-mails, הוא מקבל אותו כאובייקט חי, מה שאומר שכל שינוי שאני עושה במקור באובייקט arr-files משתקף גם כן בכל האיברים שבarr-mails המכילים את נתוני האובייקט הזה.

    השאלה איך אני יכול להכניס את הנתונים של arr-files לתוך arr-mails, בלי שאח"כ יהיה שינוי בarr-mails בכל פעם שאני ישנה את אובייקט המקור arr-files.

    תודה.

    תגובה 1 תגובה אחרונה
    1
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #2

      אתה צריך ליצור עותק של המערך, ככה:

      var copy = arrFiles.slice(0);
      

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      2
      • zvizviZ מנותק
        zvizviZ מנותק
        zvizvi
        כתב ב נערך לאחרונה על ידי zvizvi
        #3

        או עם ספריית lodah:

        var copy = _.cloneDeep(arrFiles);
        

        https://lodash.com/docs/4.17.10#cloneDeep

        (ובאנגולר יש את angular.copy() שעושה אותו דבר)

        https://zvizvi.xyz

        תגובה 1 תגובה אחרונה
        2
        • dovidD מחובר
          dovidD מחובר
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #4

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

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          zvizviZ תגובה 1 תגובה אחרונה
          2
          • zvizviZ מנותק
            zvizviZ מנותק
            zvizvi
            השיב לdovid ב נערך לאחרונה על ידי zvizvi
            #5

            @dovid אמר בשימוש באובייקט שנשאר ברקע ומשתנה, באופן ששינוי בו לא ישתקף באובייקטים אחרים שהורשו ממנו:

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

            צודק, ובשביל העתקה רגילה יש את:

             _.clone()
            

            (אני לא יודע אם זה עובד ע"י המרה לJSON, כי אם כן לא ניתן לבצע את זה על אובייקט שיש לו בן שמצביע על בן אחר. (circular structure). או שאולי גם לזה יש פתרונות).

            https://zvizvi.xyz

            תגובה 1 תגובה אחרונה
            1
            • dovidD מחובר
              dovidD מחובר
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #6

              @zvizvi אמר בשימוש באובייקט שנשאר ברקע ומשתנה, באופן ששינוי בו לא ישתקף באובייקטים אחרים שהורשו ממנו:

              cloneDeep

              @zvizvi צודק, זה ראיה שזה לא עם JSON.

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              0
              • א מנותק
                א מנותק
                אהרן
                כתב ב נערך לאחרונה על ידי
                #7

                חושב שהם משתמשים עם פונקצית assign.
                זה לפחות הדרך שלי ליצור העתקים של אוביקטים.

                dovidD תגובה 1 תגובה אחרונה
                1
                • dovidD מחובר
                  dovidD מחובר
                  dovid ניהול
                  השיב לאהרן ב נערך לאחרונה על ידי dovid
                  #8

                  @אהרן אמר בשימוש באובייקט שנשאר ברקע ומשתנה, באופן ששינוי בו לא ישתקף באובייקטים אחרים שהורשו ממנו:

                  חושב שהם משתמשים עם פונקצית assign.
                  זה לפחות הדרך שלי ליצור העתקים של אוביקטים.

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

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  1

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

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

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