Reputation: 127
I am attempting to take a given string and replace a given number in that string with a character. Specifically:
(this is a Kata exercise)
I have written a function which should:
My code is as appears below
Function correct(string) {
let array = string.split('')
for (let i = 0; i < array.length; i++) {
array[i].replace('5', 'S')
array[i].replace('0', 'O')
array[i].replace('1', 'I')
}
return array.join('');
}
The function returns the string exactly as initially provided, unchanged. I suspect my issue is with the way I've used the .replace()
method within the loop, or the index positions declared.
Upvotes: 1
Views: 1850
Reputation: 38502
You can do with simple regex replace()
based on your key=>value like this,
const key_to_replace = {
'5': 'S',
'1': 'I',
'0': 'O'
}
const correct = (str) =>
str.replace(/./g, (m) => key_to_replace[m] ?? m);
console.log(correct("this 5is a0 test1 with 55abc"))
Upvotes: 0
Reputation: 3911
String.prototype.replace
returns a new string and does not mutate the variable it was executed on.
That's why you need to assign the result of replacement somewhere.
To fix your code just do the following with each replacement:
array[i] = array[i].replace('5', 'S');
Note 1: since array[i]
is always a single character, there is no need in replace
, because you can just compare like so:
if (array[i] === '5') {
array[i] = 'S';
}
or oneliner:
array[i] = array[i] === '5' ? 'S' : array[i];
Note 2: for
loop for a replacement is not a clean code. JavaScript is very flexible and provides much better solutions to the problem. Eg. String.prototype.replaceAll
.
Upvotes: 1
Reputation: 27192
Try this :
const inputStr = 'AB5DE0G1H';
function correct(string) {
return string.replaceAll('5', 'S').replaceAll('0', 'O').replaceAll('1', 'l')
}
console.log(correct(inputStr));
Upvotes: 0