سؤال

لدي كائن (شجرة التحليل) يحتوي على عُقد فرعية تُشير إلى عقد أخرى.

أرغب في إجراء تسلسل لهذا الكائن ، باستخدام رمز الترقيم العام ، ولكني أحصل عليه

TypeError: قيمة الكائن الدورية

بسبب التركيبات التي ذكرتها.

كيف يمكنني التغلب على هذا؟لا يهمني ما إذا كانت هذه الإشارات إلى العقد الأخرى ممثلة أم لا في الكائن المتسلسل.

من ناحية أخرى ، تبدو إزالة هذه الخصائص من الكائن عند إنشائه أمرًا شاقًا ولا أريد إجراء تغييرات على المحلل اللغوي (النرجس).

هل كانت مفيدة؟

المحلول

استخدم المعلمة الثانية لـ stringify ، وظيفة الاستبدال ، لاستبعاد العناصر المتسلسلة بالفعل: Genacodicetagpre

http://jsfiddle.net/mH6cJ/38/

كما هو موضح بشكل صحيح في التعليقات الأخرى ، تزيل هذه الشفرة كل كائن "مرئي" ، وليس فقط الكائنات "العودية".

على سبيل المثال: Genacodicetagpre

ستكون النتيجة غير صحيحة. إذا كان الهيكل الخاص بك على هذا النحو ، فقد ترغب في استخدام فك التدوير في Crockford أو هذه (أبسط) وظيفة التي تحل محل المراجع العودية بالقيم الفارغة:

Genacodicetagpre

نصائح أخرى

لقد أنشأت GitHub Gist وهو قادر على اكتشاف الهياكل الدورية وأيضًا فكها وترميزها:https://gist.github.com/Hoff97/9842228

للتحويل فقط استخدم JSONE.stringify / JSONE.parse. كما يقوم أيضًا بفك وترميز الوظائف.إذا كنت ترغب في تعطيل هذا ، فما عليك سوى إزالة الأسطر 32-48 و61-85. Genacodicetagpre

يمكنك العثور على مثال كمان هنا:

http://jsfiddle.net/hoff97/7UYd4/

يوفر الكثير ويظهر مكان وجود كائن دورة .

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 ولدي تغييرأسماء الوظائف من الفرنسية إلى الإنجليزية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top