ניתוק משתנה מאובייקט המקור - js
-
שלום וברכה
כמשימים אובייקט במשתנה ומשנם אחרי כן את ערכי הצאצאים שלו באמצעות המשתנה, השינוי מופיע גם באובייקט המקור,
איך מנתקים?דוגמא לקוד:
var obg = {}; obg.data = { key1: 'value', key2: 'value' } var d = obg.data; d.key1 = "any value"; console.log(obg.data.key1);//any value
-
@ש-ב-ח
מעתיקים את האובייקט
יש שני אפשרויות, אפשר לעשות העתקה רקורסיבי לכל תתי האובייקטים (זה נקרא 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'}
(נ.ב. ייתכנו הבדלים דקים בין האפשרויות שאני מביא... והנחתי לאחרים מקום להעיר...)