मान लीजिए, हमें एक String.prototype फ़ंक्शन लिखना है जो तीन आर्गुमेंट लेता है।
- पहला आर्गुमेंट वह स्ट्रिंग है जिसमें उपस्ट्रिंग खोजी जानी चाहिए
- दूसरा आर्गुमेंट वह स्ट्रिंग है, जिसकी घटना को स्ट्रिंग से हटाया जाना है
- तीसरा आर्गुमेंट एक संख्या है, मान लीजिए n, उपस्ट्रिंग की nवीं घटना जिसे स्ट्रिंग से हटाया जाना है।
यदि स्ट्रिंग से उपस्ट्रिंग को हटाना सफल रहा तो फ़ंक्शन को नई स्ट्रिंग लौटानी चाहिए, अन्यथा सभी मामलों में -1 लौटाना चाहिए।
कोड
const str = 'jkdsttjkdsre';
const subStr = 'jk';
const num = 2;
removeStr = function(subStr, num) {
if (!this.includes(subStr)) { return -1; }
let start = 0, end = subStr.length;
let occurences = 0;
for (; ; end < this.length) {
if (this.substring(start, end) === subStr) { occurences++; }
if (occurences === num) {
return this.substring(0, start) + this.substring(end, this.length);
}
end++;
start++;
}
};
String.prototype.removeStr = removeStr;
console.log(str.removeStr(subStr, num));
यह फ़ंक्शन सबसे पहले जाँचता है: यदि उपस्ट्रिंग की एक भी घटना नहीं है तो हमें बाहर निकलकर -1 लौटाना चाहिए।
फिर यह स्लाइडिंग विंडो एल्गोरिथम का उपयोग करके स्ट्रिंग में उपस्ट्रिंग की घटनाओं की संख्या रिकॉर्ड करता है (विंडो का आकार उपस्ट्रिंग की लंबाई के बराबर होता है)।
प्रारंभ में, हम सबसे बाएँ विंडो से शुरू करते हैं फिर हम अपनी विंडो को तब तक स्लाइड करते रहते हैं जब तक विंडो का अंत मूल स्ट्रिंग के अंत तक नहीं पहुँच जाता। यदि हमारे रास्ते में, घटनाओं की गिनती आवश्यक घटना के बराबर होती है, तो हम उस घटना को स्ट्रिंग से काट देते हैं और इस प्रकार प्राप्त नई स्ट्रिंग लौटाते हैं।
यदि हम पूरी स्ट्रिंग पर पुनरावृति करते हैं, तो इसका मतलब है कि स्ट्रिंग में उपस्ट्रिंग की पर्याप्त घटनाएँ नहीं हैं और उस मामले में हमें -1 लौटाकर फ़ंक्शन से बाहर निकलना चाहिए।
अंत में, हम removeStr प्रॉपर्टी को String.prototype में जोड़ते हैं ताकि हम इसे स्ट्रिंग फ़ंक्शन के रूप में कॉल कर सकें।
आउटपुट
jkdsttdsre