यहाँ जावास्क्रिप्ट ऑब्जेक्ट को JSon में क्रमबद्ध किया गया है:
var source1 = '[{"vConfig":{"vType":"objectview","serverItemType":"TrackerObject"}}]';
और यहाँ एक और जावास्क्रिप्ट ऑब्जेक्ट है, जिसे JSon में भी सीरियल किया गया है:
var source2 = '[{"vConfig":{"serverItemType":"TrackerObject","vType":"objectview"}}]';
उनके पास समान संरचना, समान पैरामीटर, इन मापदंडों में समान मूल्य हैं। सभी संकेतों से, हमारे पास
source1
और
source2
में
एक ही बात है।
लेकिन जावास्क्रिप्ट दुभाषिया, निश्चित रूप से, हमारे साथ सहमत नहीं है। और वह यथोचित रूप से मानता है कि source1 और source2 अलग-अलग तार हैं। और अगर हम उन्हें वापस लेने की इच्छा करते हैं, तो हमें अलग-अलग मेमोरी पतों पर दो ऑब्जेक्ट मिलते हैं और ... एक-दूसरे के बराबर भी नहीं।
और अगर, इसके अलावा, आप Ext.js के साथ काम करते हैं, उदारता से अपनी कक्षाएं उत्पन्न करते हैं और jSon के बारे में नहीं भूलते हैं, तो यह कुल ग्रहण तक पहुंच सकता है। JSons में एकत्र किए गए नियंत्रणों के बारे में जानकारी के इन विशाल चादरों की तुलना कैसे करें? या पेड़ की तरह की वस्तुओं को छाँट दें, जहाँ प्रत्येक क्षेत्र में कुछ अन्य उप-फ़ील्ड पहले से ही बनाए गए हैं?
केवल एक ही रास्ता है - आपको मूल्य से तुलना करने का एक तरीका खोजने की आवश्यकता है, मेमोरी में सेल द्वारा नहीं, बल्कि अधिक लचीले रूप से।
समान उन वस्तुओं पर विचार किया जाना चाहिए जिनके लिए समान फ़ील्ड में समान मान हैं । इस दृष्टिकोण से, हमारे
source1
निश्चित रूप से
source2
बराबर है।
और इसलिए अगली साइकिल का जन्म हुआ -
JSonCmp । जावास्क्रिप्ट में वस्तुओं की तुलना करने के लिए एक सरल और बहुत उपयोगी कार्य। बेशक, मुझे इसे लिखने के कई प्रयास मिले, लेकिन प्रत्येक कार्यान्वयन ने समस्या का केवल एक ही भाग हल किया - नतीजतन, मैंने सभी दिलचस्प विचारों को एक में लाया, साथ ही साथ एक दो को जोड़कर ...
इसका उपयोग करना सरल है - बस
jsoncmp.js कनेक्ट करें और फिर कॉल करें:
jSonCom(object1, object2);
यदि ऑब्जेक्ट में समान जानकारी है, तो फ़ंक्शन सही वापस आ जाएगा। नहीं तो झूठा।
Ext.js उपयोगकर्ता समान एल्गोरिथ्म का उपयोग कर सकते हैं, लेकिन प्लगइन आवरण में -
jsoncmp.ext.js । कोड इस तरह दिखेगा:
Ext.ux.util.Object(object1, object2);
तुलना नियम इस प्रकार हैं:
- नल अशक्त है
- विभिन्न प्रकार की वस्तुएं समान नहीं हैं
- मूल्य द्वारा चर (फ्लोट, इंटेगर, बूलियन) की तुलना मूल्य से की जाती है
- तार की तुलना मूल्य से की जाती है
- क्रमबद्ध jsons की तुलना deserialized ऑब्जेक्ट के रूप में की जाती है
- फ़ंक्शन की तुलना स्रोत कोड द्वारा स्ट्रिंग में की जाती है
- jQuery ऑब्जेक्ट्स की तुलना इस लाइब्रेरी के लिए मानक फ़ंक्शन का उपयोग करके की जाती है।
- वस्तुओं की तुलना खेतों और उनके मूल्यों से की जाती है। यदि क्षेत्र के मूल्य में भी एक वस्तु है - तो यह उसी सिद्धांत के अनुसार तुलना की जाती है
- यदि, इस पेड़ को ट्रेस करते समय, यह पाया जाता है कि शीट पहले से ही पारित वस्तुओं में से एक को संदर्भित करती है (इसका मतलब है कि पेड़ में एक चक्र है), वस्तुओं के लिंक की तुलना की जाएगी। "
- एरे की तुलना तत्वों के पत्राचार और उनके आदेश के लिए दोनों से की जाती है
- यदि आप सरणियों को सेट करते हैं = खोज सेटिंग्स में सही है, तो सरणियों को सेट (सेट) के रूप में माना जाएगा और तत्वों के अनुक्रम को अनदेखा किया जाएगा। खोज सेटिंग्स तीसरे, वैकल्पिक पैरामीटर में सेट की गई हैं। इस तरह से:
jSonCmp([ 1, 2, 3, 4, 5 ], [ 1, 2, 3, 5, 4 ], { arraysAsSets : true })); # - true
डिफ़ॉल्ट रूप से, arraysAsSets झूठी पर सेट है।
मुझे उम्मीद है कि यह एक छोटी और शायद अपूर्ण विशेषता थोड़ी है, लेकिन आपके काम को सरल करेगा।