से

सेट में JavaScript

2 अभ्यास

सेट के बारे में

JavaScript में सेट एक ऐरे जैसी डेटा संरचना है, जिसमें केवल अद्वितीय प्रिमिटिव और/या ऑब्जेक्ट रेफरेंस ही रखे जा सकते हैं।

सेट बनाने के लिए सेट कंस्ट्रक्टर का ही उपयोग करना पड़ता है। कंस्ट्रक्टर को एक ऐरे पास करके सेट को शुरुआती वैल्यू के साथ बनाया जा सकता है।

const emptySet = new Set();
const setWithInitialValues = new Set(['hello', 'world']);

एलिमेंट जोड़ना और हटाना

अगर कोई वैल्यू सेट के किसी भी एलिमेंट के strictly equal है, तो उसे सेट में नहीं जोड़ा जा सकता।

const set = new Set();
set.add(10);
set.add(10); // 10 is strictly equal to 10, so it can't be added again
set.size;
//=> 1;

set.has(10);
//=> true
set.delete(10);
//=> true; 10 was removed
set.delete(10);
//=> false; 10 is not in the set, so nothing happened

const obj = { color: 'magenta' };
const eerilySimilarObj = { color: 'magenta' };

set.add(obj);
set.add(eerilySimilarObj); // obj and eerilySimilarObj reference different objects, so they can both be added
set.size;
//=> 2

set.clear();
set.size;
//=> 0

सेट और ऐरे को एक-दूसरे में बदलना

ऐरे को सेट कंस्ट्रक्टर की मदद से सेट में बदला जाता है। सेट को spread syntax या Array.from() की मदद से ऐरे में बदला जा सकता है।

const arrayWithDuplicates = [7, 3, 3, 9, 3];
const arrayWithoutDuplicates = [...new Set(arrayWithDuplicates)]; // [7, 3, 9]
const anotherArrayWithoutDuplicates = Array.from(new Set(arrayWithDuplicates)); // [7, 3, 9]

इटरेशन

सेट एक keyed collection है। इसका मतलब है कि इसके हर एलिमेंट का अपना एक की होता है, और एलिमेंट उसी क्रम में इटरेट किए जा सकते हैं जिस क्रम में उन्हें जोड़ा गया था। चूँकि सेट के किसी एलिमेंट का की और वैल्यू एक ही होते हैं, इसलिए Set.keys() और Set.values() एक-दूसरे के बदले इस्तेमाल किए जा सकते हैं।

const apples = ['Granny Smith', 'Honey Crisp', 'Royal Gala'];
const appleSet = new Set(apples);

for (let apple of appleSet.keys()) {
  console.log(apple);
}
// 'Granny Smith'
// 'Honey Crisp'
// 'Royal Gala'

for (let apple of appleSet.values()) {
  console.log(apple);
}
// 'Granny Smith'
// 'Honey Crisp'
// 'Royal Gala'

for (let apple of appleSet.entries()) {
  console.log(apple);
}
// ['Granny Smith', 'Granny Smith']
// ['Honey Crisp', 'Honey Crisp']
// ['Royal Gala', 'Royal Gala']

ऐरे के मुकाबले लुकअप परफॉर्मेंस

डेटा का संग्रह रखने के लिए जब ऐरे के बजाय सेट चुना जाता है, तो आम तौर पर इसलिए चुना जाता है कि रखी जाने वाली वैल्यू अद्वितीय होनी चाहिए। लेकिन ऐरे की मदद से भी अद्वितीयता बनाए रखी जा सकती है, इसलिए यह साफ़ नहीं होता कि ऐसा क्यों किया जाता है।

इसका छोटा जवाब यह है कि सेट खोजने के काम के लिए बनाए गए हैं, ऐरे नहीं। ऐरे में खोज करने वाले मेथड (जैसे Array.indexOf()) का रनटाइम ऐरे के आकार के साथ-साथ रैखिक रूप से बढ़ता है, यानी ऐरे में जितने ज़्यादा एलिमेंट होते हैं, उसमें खोज करने में उतना ही ज़्यादा समय लगता है। दूसरी ओर, सेट में खोज करने वाले मेथड का रनटाइम स्थिर रहता है, यानी सेट का आकार कुछ भी हो, वह बदलता नहीं।

लेकिन व्यवहार में यह अंतर तब तक नगण्य रहता है जब तक संग्रह में बहुत ज़्यादा डेटा न हो।

GitHub के ज़रिए संपादित करें यह लिंक नई विंडो या टैब में खुलता है।

सेट सीखिए