split(''), reduce(), और replace() का उपयोग करके दूसरी स्ट्रिंग के प्रत्येक कैरेक्टर को पहली स्ट्रिंग से हटाएं।
बुनियादी समाधान
const removeChars = (removalStr, originalStr) =>
removalStr.split('').reduce((acc, char) => acc.replace(char, ''), originalStr);
const original = "JOHNDOE";
const removal = "JOHN";
console.log(removeChars(removal, original)); // "DOE"
चरण-दर-चरण
// 1. removalStr को कैरेक्टर ऐरे में बदलें
"JOHN".split('') // ['J', 'O', 'H', 'N']
// 2. reduce से प्रत्येक कैरेक्टर को originalStr से हटाएं
.reduce((acc, char) => acc.replace(char, ''), "JOHNDOE")
// प्रक्रिया:
// 'J' → "OHNDOE"
// 'O' → "HNDOE"
// 'H' → "NDOE"
// 'N' → "DOE"
समस्या: replace() केवल पहली घटना बदलता है
const original = "BANANA";
const removal = "AN";
// वर्तमान कोड:
console.log(removeChars(removal, original)); // "BANA" (केवल पहला A,N हटा)
// सुधार: ग्लोबल रेगएक्स
const removeCharsGlobal = (removal, original) =>
removal.split('').reduce(
(acc, char) => acc.replace(new RegExp(char, 'g'), ''),
original
);
console.log(removeCharsGlobal("AN", "BANANA")); // "B" (सभी A,N हटे)
बेहतर: Set + filter (अधिक कुशल)
function removeCharsSet(removal, original) {
const removeSet = new Set(removal);
return [...original].filter(char => !removeSet.has(char)).join('');
}
console.log(removeCharsSet("JOHN", "JOHNDOE")); // "DOE"
console.log(removeCharsSet("AN", "BANANA")); // "B"
चलाने का तरीका
node remove-chars.js
आउटपुट
DOE
तुलना
| विधि | सभी घटनाएं | प्रदर्शन | नोट्स |
|---|---|---|---|
| reduce + replace | नहीं (पहली) | धीमा | सरल |
| reduce + regex(g) | हां | मध्यम | रेगएक्स ओवरहेड |
| Set + filter | हां | तेज़ O(n+m) | अनुशंसित |
विशेष कैरेक्टर्स एस्केप करें
function escapeRegex(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
function removeCharsSafe(removal, original) {
const removeSet = new Set(removal);
return [...original].filter(c => !removeSet.has(c)).join('');
// Set तरीके में एस्केप की जरूरत नहीं
}