String.prototype.replace() can take a function
You can use a function to dynamically provide the replacement value in a replace
operation
I was pondering different approaches to solving the Codewars kata Simple string reversal, and having submitted my own, I started to browse other solutions. One that caught my eye was this, from users Bubbler and Tellurian:
function solve(str) {
let arr = [...str].filter(x => x != ' ')
return str.replace(/\S/g, _ => arr.pop())
}
If you look at the MDN page for String.prototype.replace() the syntax is given thus:
const newStr = str.replace(regexp|substr, newSubstr|function)
A function! I probably had come across this before but had forgotten. The beauty of the solution above lies in this possibility; while the arr.pop()
mutates the arr
, it does it in such a beguiling way I don't have any issue enjoying the entire replace
call. Given that the regular expression g
modifier is used, the function supplied is called N times, each time supplying a (single character) value from the arr
array.
Absolutely lovely.