removeDuplicates () ऑब्जेक्ट की एक सरणी में लेता है और किसी भी डुप्लिकेट ऑब्जेक्ट (आईडी प्रॉपर्टी के आधार पर) के बिना एक नया एरे देता है।
const allTests = [
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'},
{name: 'Test2', id: '2'},
{name: 'Test3', id: '3'}
];
function removeDuplicates(array) {
let uniq = {};
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true))
}
removeDuplicates(allTests);
अनुमानित परिणाम:
[
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'}
];
सबसे पहले, हम चर uniq का मान किसी खाली वस्तु पर सेट करते हैं।
अगला, हम वस्तुओं की सरणी के माध्यम से फ़िल्टर करते हैं। फ़िल्टर सभी तत्वों के साथ एक नया सरणी बनाता है जो प्रदान किए गए फ़ंक्शन द्वारा कार्यान्वित परीक्षण को पास करता है।
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true));
ऊपर, हम && की लघु-संचलन कार्यक्षमता का उपयोग करते हैं। यदि && के बाईं ओर स्थित सही का मूल्यांकन करता है, तो वह && के दाईं ओर का मान लौटाता है। यदि बाईं ओर गलत है, तो यह वापस वही होता है जो && के बाईं ओर है।
प्रत्येक ऑब्जेक्ट (obj) के लिए, हम obj.id के मान नामक एक संपत्ति के लिए uniq की जांच करते हैं (इस मामले में, पहली पुनरावृत्ति पर यह संपत्ति '1' के लिए जांच करेगा।) हम इसके विपरीत चाहते हैं कि यह (या तो सच है) या गलत) जिसके कारण हम इसका उपयोग करते हैं! in; uniq [obj.id]। अगर uniq के पास पहले से ही id प्रॉपर्टी है, तो यह सही है जो फ़िल्टर का कार्य करता है (!) फ़िल्टर फ़ंक्शन को उस obj को जोड़ने के लिए नहीं कहता है। हालाँकि, यदि उसे obj.id संपत्ति नहीं मिलती है, तो वह झूठी हो जाती है जो तब सही (!) का मूल्यांकन करती है और सब कुछ वापस & nbsp; या (uniq [obj.id] = true) के अधिकार में वापस कर देती है। यह एक सत्य मान है, फ़िल्टर विधि को उस ओबज को लौटे हुए सरणी में जोड़ने के लिए, और यह भी संपत्ति {1: true} को uniq में जोड़ता है। यह सुनिश्चित करता है कि उसी आईडी के साथ किसी भी अन्य उदाहरण को फिर से नहीं जोड़ा जाएगा।