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

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

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

ניתוק משתנה מאובייקט המקור - js

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

    שלום וברכה
    כמשימים אובייקט במשתנה ומשנם אחרי כן את ערכי הצאצאים שלו באמצעות המשתנה, השינוי מופיע גם באובייקט המקור,
    איך מנתקים?

    דוגמא לקוד:

    var obg = {};
    obg.data = {
      key1: 'value',
      key2: 'value'
    }
    var d = obg.data;
    d.key1 = "any value";
    console.log(obg.data.key1);//any value
    
    yossizY תגובה 1 תגובה אחרונה
    0
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב לש.ב.ח. ב נערך לאחרונה על ידי yossiz
      #2

      @ש-ב-ח
      מעתיקים את האובייקט
      יש שני אפשרויות, אפשר לעשות העתקה רקורסיבי לכל תתי האובייקטים (זה נקרא deep clone) או להעתיק רק את הרמה העליונה (shallow clone).

      var obj = {
        key1: {a: 1, b: 2},
        key2: 'xyz'
      };
      
      // no clone
      var obj2 = obj
      obj2.key1.a = 3
      obj2.key2 = 'abc'
      console.log(obj); // {key1:{a:3,b:2},key2:'abc'}
      
      // shallow clone
      var obj3 = Object.assign({}, obj);
      // או
      var obj3 = {...obj}
      // או 
      const _ = require('lodash')
      var obj3 = _.clone(obj)
      
      obj3.key1.a = 3
      obj3.key2 = 'abc'
      console.log(obj); // {key1:{a:3,b:2},key2:'xyz'}
      
      // deep clone
      var obj4 = JSON.parse(JSON.stringify(obj))
      // או 
      const _ = require('lodash')
      var obj4 = _.cloneDeep(obg.data)
      
      obj4.key1.a = 3
      obj4.key2 = 'abc'
      console.log(obj); // {key1:{a:1,b:2},key2:'xyz'}
      

      (נ.ב. ייתכנו הבדלים דקים בין האפשרויות שאני מביא... והנחתי לאחרים מקום להעיר...)

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

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

        אם אתה באנגולר 1, יש לך את angular.copy
        ובאנגולר 2 האפשרות של {...obg.data} ש@yossiz הראה תעבוד בכל הדפדפנים כי זה עובר טרנספילר.
        אם לא אז JSON.parse.

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

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

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

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

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

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