تسلسل الكائن الذي يحتوي على قيمة كائن دوري
-
28-10-2019 - |
سؤال
لدي كائن (شجرة التحليل) يحتوي على عُقد فرعية تُشير إلى عقد أخرى.
أرغب في إجراء تسلسل لهذا الكائن ، باستخدام رمز الترقيم العام ، ولكني أحصل عليه
TypeError: قيمة الكائن الدورية
بسبب التركيبات التي ذكرتها.
كيف يمكنني التغلب على هذا؟لا يهمني ما إذا كانت هذه الإشارات إلى العقد الأخرى ممثلة أم لا في الكائن المتسلسل.
من ناحية أخرى ، تبدو إزالة هذه الخصائص من الكائن عند إنشائه أمرًا شاقًا ولا أريد إجراء تغييرات على المحلل اللغوي (النرجس).
المحلول
استخدم المعلمة الثانية لـ stringify
، وظيفة الاستبدال ، لاستبعاد العناصر المتسلسلة بالفعل:
Genacodicetagpre
كما هو موضح بشكل صحيح في التعليقات الأخرى ، تزيل هذه الشفرة كل كائن "مرئي" ، وليس فقط الكائنات "العودية".
على سبيل المثال: Genacodicetagpre
ستكون النتيجة غير صحيحة. إذا كان الهيكل الخاص بك على هذا النحو ، فقد ترغب في استخدام فك التدوير في Crockford أو هذه (أبسط) وظيفة التي تحل محل المراجع العودية بالقيم الفارغة:
نصائح أخرى
لقد أنشأت GitHub Gist وهو قادر على اكتشاف الهياكل الدورية وأيضًا فكها وترميزها:https://gist.github.com/Hoff97/9842228
للتحويل فقط استخدم JSONE.stringify / JSONE.parse. كما يقوم أيضًا بفك وترميز الوظائف.إذا كنت ترغب في تعطيل هذا ، فما عليك سوى إزالة الأسطر 32-48 و61-85. Genacodicetagpre
يمكنك العثور على مثال كمان هنا:
يوفر الكثير ويظهر مكان وجود كائن دورة .
Genacodicetagpreتنتج Genacodicetagpre
كان الشرط المسبق مفقودًا ، وإلا فسيتم اقتطاع قيم الأعداد الصحيحة في كائنات المصفوفة ، أي [[08.11.2014 12:30:13، 1095]] يتم تقليل 1095 إلى 095.
لقد قمت أيضًا بإنشاء مشروع جيثب يمكنه إجراء تسلسل للكائن الدوري واستعادة الفئة إذا قمت بحفظها في سمة اسم التسلسل مثل سلسلة Genacodicetagpre
https://github.com/bormat/serializeStringifyParseCyclicObject
تحرير: لقد قمت بتحويل النص البرمجي لـ NPM https://github.com/bormat/borto_circular_serialize ولدي تغييرأسماء الوظائف من الفرنسية إلى الإنجليزية.