ניקוי אובייקט js
-
אני רוצה לעשות
JSON.stringify
על אובייקט, ואני מקבלTypeError: Converting circular structure to JSON
.אני צריך לנקות את האובייקט מהפונקציות שלו, וראיתי כאן,
אבל הסתבכתי כיון שלא הצלחתי לעשות העתקה עמוקה לאובייקטים.איך מומלץ לעשות? תודה רבה.
-
-
-
@chagold תוכל יותר להסביר את הסיטואציה? האם באמת יש הפניות מעגליות באובייקט? ולמה אתה צריך לנקות את האובייקט מהפונקציות? ואיך זה קשור להעתקה עמוקה?
-
chagoldהשיב ליוסף בן שמעון ב 4 בספט׳ 2021, 23:14 נערך לאחרונה על ידי chagold 9 באפר׳ 2021, 23:14
@יוסף-בן-שמעון מבוטל.
גיליתי את הטעות שלי.
תודה רבה. -
chagoldהשיב לchagold ב 5 בספט׳ 2021, 12:21 נערך לאחרונה על ידי chagold 9 במאי 2021, 16:13
אחרי מחשבה ובדיקה חוזרת.
אע"ג שהיה לי איזה פיתרון, אבל אני סבור שהוא לא תקין, כיון שכשאני עושה הדפסה בקונסול של איזה ערך אני רואה שיש לופ ענק שמתגלגל שם, וזה לא אמור להיות לפי הערכתי. אני מציג את הדברים.זה ב-vueX.
אני רוצה לשנות ערך שנמצא בstate.user (state.user.accountselected). (הערך הנוסף הוא 'administrator')יצרתי 'מוטציה' חדשה
selectaccount(state,account) { state.user.accountselected = account localStorage.setItem('user', JSON.stringify(state.user)); } וכשאני קורא אליה, השגיאה היא כדלעיל. זה הלוג.
-
@chagold לא מבין בVUE, השגיאה הזו אומרת שיש הפניה מעגלית, כלומר אחד מהנכסים של האובייקט מצביע לאובייקט עצמו, לדוגמא
const obj = {} obj.prop = obj נסה לדמיין איך אפשר להמיר כזה דבר למחרוזת.
ספציפית אצלך זה נראה שהארגומנט account מצביע על ה state.user, וזה גורם הפניה מעגלית כאשר אתה יוצר נכס בשם accountselected ומצביע איתו על היוזר.
היות ולא הבנתי את הצורך שלך, אין לי פיתרון, רק מציג את הבעיה
-
אני אוהב להשתמש בזה
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#tojson_behavior
כמובן מותנה בזה שהאובייקט שלך הוא באמת אובייקט (בטייפסקריפט יש בזה קפידא יתירה) -
@יוסף-בן-שמעון
מצאתי בס"ד את הפתרון.
זה 2 בעיות שונות.- בשביל ההפניה המעגלית, צריך בפוקנציה שבקומפוננט שקורא (למוטציה), לשכפל את האובייקט
selectaccount:function (payload) { const { account } = payload; this.$store.commit("selectaccount",account); } - ובשביל שלא יהיה לופ ענק סתם, צריך במוטציה להתנות שלא יהיה undefined. (ההסבר כנראה - כי משום מה - כשאין לו ערך (כגון כשהוא מאתחל את הפרוייקט) הוא מריץ את כל האובייקט של vue או משהו דומה, מה שלא קורא כשאני בודק שהוא לא undefined).
-
@chagold אמר בניקוי אובייקט js:
בשביל ההפניה המעגלית, צריך בפוקנציה שבקומפוננט שקורא (למוטציה), לשכפל את האובייקט
selectaccount:function (payload) { const { account } = payload; this.$store.commit("selectaccount",account); }
@chagold, הערה בדרך אגב (לא חושב שזה מצדיק נושא חדש):
אפשר לעשות destructuring על הארגומנט עצמו, ובכך לחסוך שורה מיותרת:selectaccount:function ({ account }) { this.$store.commit("selectaccount",account); }
6/8