कैसे जांचा जाए कि दो वस्तुएं जावास्क्रिप्ट में समान हैं या नहीं


जवाब 1:

आपकी टिप्पणी विशेष रूप से पायथन के बारे में पूछती है, लेकिन किसी भी भाषा में समानता के लिए दो वस्तुओं का परीक्षण करने का सबसे अच्छा तरीका प्रत्येक विशेषता का परीक्षण करना है।

यदि आप ऑब्जेक्ट आईडी / पतों की तुलना करते हैं तो केवल दो चीजों के बराबर होने पर ही होगा जब दो ऑब्जेक्ट एक ही ऑब्जेक्ट होंगे।

यदि आपकी वस्तुएं हैवी हैं, और आपके पास हैश वैल्यू कैश्ड है, तो आप हैश की तुलना कर सकते हैं, लेकिन यह आपको केवल यह बताएगा कि दो ऑब्जेक्ट अलग-अलग हैं - यदि उनके हैश मान समान हैं, तो वे अभी भी अलग-अलग मान रख सकते हैं।

किसी भी भाषा में याद रखने वाली महत्वपूर्ण बात यह है कि आपको हर विशेषता को जांचने की आवश्यकता नहीं है - यह उस दिए गए ऑब्जेक्ट प्रकार के लिए आपकी समान की परिभाषा पर निर्भर करता है। उदाहरण के लिए, आपके पास उदाहरण का एक समूह है जो सभी लोगों का वर्णन करता है, और दो उदाहरण समान हैं यदि वे एक ही व्यक्ति के बारे में हैं; और आप यह तय कर सकते हैं कि जब तक दो उदाहरणों में समान SSN (या कर्मचारी आईडी संख्या या समान) है, तब तक वे दो वस्तुएं एक ही व्यक्ति को संदर्भित करती हैं। इस मामले में तब आपके समानता परीक्षण के लिए केवल एसएसएन / कर्मचारी आईडी की जांच करनी चाहिए, और किसी अन्य अटारी के बारे में चिंता नहीं करनी चाहिए।

संक्षेप में - आप उन विशेषताओं की जांच करते हैं जिन्हें आपको जांचने की आवश्यकता है ताकि यह साबित हो सके कि दो उदाहरण बराबर हैं


जवाब 2:

ऐसा करने का सही तरीका है __eq__ पद्धति को अपनी कक्षा में लागू करना, ऐसा करने से आप इस बात पर पूर्ण नियंत्रण प्राप्त कर लेते हैं कि आपकी वस्तु की समानता कैसे परिभाषित की जाती है।

और इसका उदाहरण निम्नलिखित हो सकता है, जिसमें हम कहते हैं कि दो पुस्तकें समान हैं यदि उनके पास एक ही पृष्ठ संख्या है (यह एक मूर्खतापूर्ण उदाहरण है, लेकिन यह दर्शाता है कि आप किसी भी तरह से समानता को परिभाषित कर सकते हैं)।

कक्षा की किताब: def __init __ (स्व, शीर्षक, पृष्ठ): self.title = शीर्षक self.pages = पृष्ठ def __eq __ (स्व, अन्य): self.pages == other.pages लौटाएंबाइबिल = पुस्तक ("पवित्र बाइबल", 500)क़ुरान = पुस्तक ("कुरान", 500)मुखर (बाइबिल, क़ुरान)मुखर (बाइबिल == क़ुरान)मुखर (बाइबिल! = क़ुरान)

हमारी समानता की परिभाषा के तहत सभी तीन दावे सही होंगे।


जवाब 3:

आपके द्वारा परिभाषित किसी भी वर्ग के लिए, समान विधि ऑब्जेक्ट वर्ग से विरासत में मिली है। डिफ़ॉल्ट रूप से विरासत में मिली विधि यह जांचती है कि स्मृति में स्थान दो वस्तुओं के लिए समान है या नहीं। आपको इस विधि को ओवरराइड करने की आवश्यकता है ताकि यह समानता को परिभाषित करने के तरीके को परिभाषित करे जो आप समानता को परिभाषित करना चाहते हैं (जैसे कि यदि सभी उदाहरण चर मिलते हैं, तो दो ऑब्जेक्ट समान हैं, इसलिए सही लौटें)।

यदि आप समतुल्य विधि को ओवरराइड करते हैं तो आपको हैशकोड विधि को भी ओवरराइड करना होगा। ऐसा इसलिए है क्योंकि कुछ डेटा संरचनाओं का आधार (हैश सेट, उदाहरण के लिए) यह है कि दो वस्तुओं को जो समान माना जाता है, उनमें समान हैशकोड होता है। यदि यह पकड़ में नहीं आता है, तो आप डेटा संरचना को तोड़ देंगे। आपको हैशकोड को ओवरराइड करना चाहिए ताकि समानता को परिभाषित करने के लिए आपके द्वारा उपयोग किए जाने वाले चर के आधार पर यह एक हैश लौटे।


जवाब 4:

अपनी वस्तु परिभाषा में करते हैं

def __eq __ (स्व, अन्य): स्व वापस लौटें।पायथन में उनके गुणों द्वारा समानता के लिए वस्तु उदाहरणों की तुलना करें

जवाब 5:

मैं इसे 'रिकॉर्ड-प्रकार परिभाषित' के रूप में फिर से लिखता हूं। यदि आप इसे जावा में करने के बारे में पूछते हैं, तो उत्तर है: यदि आप रिकॉर्ड-वैल्यू की समानता का परीक्षण करना चाहते हैं, तो ऑपरेशन बराबर हो जाता है। जावा प्रोग्रामिंग-भाषा में संदर्भ / पता मूल्य की समानता का परीक्षण करने के लिए सिस्टम-परिभाषित ऑपरेशन == है।