हमें एक स्ट्रिंग दी गई है जिसमें कुछ दोहराने वाले शब्द डैश (-) से अलग हैं जैसे यह:
const str = 'monday-sunday-tuesday-tuesday-sunday-sunday-monday-mondaymonday';
अब हमारा काम एक फ़ंक्शन लिखना है जो ऑब्जेक्ट्स का एक ऐरे लौटाता है, जहां प्रत्येक ऑब्जेक्ट में दो प्रॉपर्टीज value और count होती हैं, value स्ट्रिंग में शब्द है (Monday, Tuesday, Sunday) और count उनकी लगातार उपस्थिति की गिनती है।
उपरोक्त स्ट्रिंग के लिए, यह ऐरे कुछ इस तरह दिखेगा:
const arr = [
{ val: 'monday', count: 1 },
{ val: 'sunday', count: 1 },
{ val: 'tuesday', count: 2 },
{ val: 'sunday', count: 2 },
{ val: 'monday', count: 3 }
]
क्योंकि monday एक बार आता है, फिर sunday एक बार, tuesday दो बार, sunday दो बार और अंत में monday तीन बार।
हम ऐरे को विभाजित करेंगे और फिर Array.prototype.reduce() मेथड का उपयोग करके वांछित ऐरे को रिकर्सिवली लौटाएंगे जैसे यह:
यहां पूरा कोड है:
उदाहरण
const str = 'monday-sunday-tuesday-tuesday-sunday-sunday-monday-mondaymonday';
const str2 = 'friday-friday-sunday-tuesday-sunday-sunday-monday-thursdaymonday';
const compressString = (str) => {
return str.split('-').reduce((acc, val) => {
const { length: l } = acc;
if(acc[l-1]?.val === val){
acc[l-1].count++;
return acc;
}else{
return acc.concat({
val,
count: 1
});
}
}, []);
}
console.log(compressString(str));
console.log(compressString(str2));
आउटपुट
उपरोक्त कोड के लिए कंसोल में आउटपुट होगा:
[
{ val: 'monday', count: 1 },
{ val: 'sunday', count: 1 },
{ val: 'tuesday', count: 2 },
{ val: 'sunday', count: 2 },
{ val: 'monday', count: 3 }
]
[
{ val: 'friday', count: 2 },
{ val: 'sunday', count: 1 },
{ val: 'tuesday', count: 1 },
{ val: 'sunday', count: 2 },
{ val: 'monday', count: 1 },
{ val: 'thursday', count: 1 },
{ val: 'monday', count: 1 }
]