চক্রীয় রেফারেন্স সহ ডেটা স্ট্রাকচারের উদাহরণ এখানে রয়েছে:
function makeToolshed(){
var nut = {name: 'nut'}, bolt = {name: 'bolt'};
nut.needs = bolt; bolt.needs = nut;
return { nut: nut, bolt: bolt };
}
আপনি যখন সাইক্লিক রেফারেন্সগুলি কেপ করতে চান (যখন আপনি "নুকিং" না দিয়ে ডিসরিয়াল করবেন তখন সেগুলি পুনরুদ্ধার করুন), আপনার কাছে দুটি পছন্দ আছে, যা আমি এখানে তুলনা করব। প্রথমটি হ'ল ডগলাস ক্রকফোর্ডের চক্র .js , দ্বিতীয়টি আমার সাইবেরিয়া প্যাকেজ। উভয়ই প্রথম "ডাইসাইক্লিং" অবজেক্ট দ্বারা কাজ করে, অর্থাত্, একই তথ্য সম্বলিত অন্য কোনও অবজেক্ট (কোনও চক্রীয় রেফারেন্স ছাড়াই) নির্মাণ করে। "
মিঃ ক্রকফোর্ড প্রথম যান:
JSON.decycle(makeToolshed())
আপনি দেখতে পাচ্ছেন, জেএসএনের নেস্টেড কাঠামোটি ধরে রাখা হয়েছে, তবে একটি নতুন জিনিস রয়েছে যা বিশেষ $ref
সম্পত্তি যুক্ত objects আসুন দেখুন কিভাবে এটি কাজ করে।
root = makeToolshed();
[root.bolt === root.nut.needs, root.nut.needs.needs === root.nut]; // retutrns [true,true]
ডলারের চিহ্নটি মূলকে বোঝায়। .bolt
থাকার $ref
আমাদেরকে বলে যে .bolt
একটি "ইতিমধ্যে দেখা" বস্তু, এবং যে বিশেষ সম্পত্তির মান (এখানে স্ট্রিং $ [ "বাদাম"] [ "চাহিদা"]) আমাদেরকে যেখানে, প্রথম দেখতে বলে ===
উপরে। একইভাবে দ্বিতীয় $ref
এবং দ্বিতীয়টির জন্য ===
।
ক্লোনিং কাজ করে কিনা তা দেখার জন্য আসুন একটি গভীর গভীর সমতা পরীক্ষা (যথা এই প্রশ্নেরdeepGraphEqual
গ্রহণযোগ্য উত্তর থেকে অ্যান্ডারস কাসরগের কার্যকারিতা ) ব্যবহার করুন।
root = makeToolshed();
clone = JSON.retrocycle(JSON.decycle(root));
deepGraphEqual(root, clone) // true
serialized = JSON.stringify(JSON.decycle(root));
clone2 = JSON.retrocycle(JSON.parse(serialized));
deepGraphEqual(root, clone2); // true
এখন, সাইবেরিয়া:
JSON.Siberia.forestify(makeToolshed())
সাইবেরিয়া "ক্লাসিক" জেএসএন, কোনও নেস্টেড কাঠামো নকল করার চেষ্টা করে না। অবজেক্ট গ্রাফটি "ফ্ল্যাট" পদ্ধতিতে বর্ণনা করা হয়। অবজেক্ট গ্রাফের প্রতিটি নোডকে সমতল গাছে রূপান্তরিত করা হয় (কেবলমাত্র পূর্ণসংখ্যার মানগুলির সাথে প্লেইন কী মান জোড়ের তালিকা) যা .forest.
সূচকের শূন্যের একটি এন্ট্রি , আমরা মূল বস্তুটি খুঁজে পাই, উচ্চতর সূচকগুলিতে, আমরা অন্যান্য নোডগুলি খুঁজে পাই অবজেক্ট গ্রাফ এবং নেতিবাচক মানগুলি (বনের কিছু গাছের কিছু কী এর) atoms
অ্যারেতে নির্দেশ করে , (যা টাইপ অ্যারে দিয়ে টাইপ করা হয়, তবে আমরা এখানে টাইপিংয়ের বিশদটি এড়িয়ে যাব)। সমস্ত টার্মিনাল নোডগুলি পরমাণু টেবিলের মধ্যে রয়েছে, সমস্ত নন-টার্মিনাল নোডগুলি বনের টেবিলে রয়েছে এবং আপনি অবিলম্বে দেখতে পাবেন যে অবজেক্টের গ্রাফটি রয়েছে কতগুলি নোড, যথা forest.length
। এটি পরীক্ষা করে দেখা যাক:
root = makeToolshed();
clone = JSON.Siberia.unforestify(JSON.Siberia.forestify(root));
deepGraphEqual(root, clone); // true
serialized = JSON.Siberia.stringify(JSON.Siberia.forestify(root));
clone2 = JSON.Siberia.unforestify(JSON.Siberia.unstringify(serialized));
deepGraphEqual(root, clone2); // true
তুলনা
পরে বিভাগ যুক্ত হবে।