תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    חוקי הפורום

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

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

      אני מקוה להיות מספיק מובן, כיון שזה מסובך מאד להציג את זה ב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
      • dovid
        dovid ניהול נערך לאחרונה על ידי dovid

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

        var copy = arrFiles.slice(0);
        

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

        תגובה 1 תגובה אחרונה תגובה ציטוט 2
        • zvizvi
          zvizvi נערך לאחרונה על ידי zvizvi

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

          var copy = _.cloneDeep(arrFiles);
          

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

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

          https://zvizvi.xyz

          תגובה 1 תגובה אחרונה תגובה ציטוט 2
          • dovid
            dovid ניהול נערך לאחרונה על ידי

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

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

            zvizvi תגובה 1 תגובה אחרונה תגובה ציטוט 2
            • zvizvi
              zvizvi @dovid נערך לאחרונה על ידי zvizvi

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

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

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

               _.clone()
              

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

              https://zvizvi.xyz

              תגובה 1 תגובה אחרונה תגובה ציטוט 1
              • dovid
                dovid ניהול נערך לאחרונה על ידי

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

                cloneDeep

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

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

                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • א
                  אהרן נערך לאחרונה על ידי

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

                  dovid תגובה 1 תגובה אחרונה תגובה ציטוט 1
                  • dovid
                    dovid ניהול @אהרן נערך לאחרונה על ידי dovid

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

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

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

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

                    תגובה 1 תגובה אחרונה תגובה ציטוט 1
                    • 1 / 1
                    • פוסט ראשון
                      פוסט אחרון
                    בא תתחבר לדף היומי!