提示是:
Create a function that takes in a string and returns a "URL version" of the string. This simply involves replacing the spaces with %20.
它要求使用递归解决问题,并且不允许使用 .replace 。
这是我的解决方案,但我知道 ouputArray 正在发生变异。有没有其他方法可以在没有突变的情况下解决这个问题?
let inputString = "hello world I am fine";
let outputArray = [];
let stringToUrl = (inputString, n) => {
inputArray = [...inputString]
if(n < inputArray.length) {
if(inputArray[n] !== " ") {
outputArray.push(inputArray[n])
return stringToUrl(inputArray, n+1)
}
else {
outputArray.push("%20")
return stringToUrl(inputArray, n+1)
}
}
return outputArray.join('');
}
console.log(stringToUrl(inputString, 0))
最佳答案
是的,您可以使用 FP 执行此操作。与 How do I ask and answer homework questions? 保持一致,我不会用代码回复,而是用指针回复。
如果您没有使用 FP 执行此操作(但仍然必须自己编写而不是使用字符串 replace
方法等),您可能会使用循环通过循环遍历原始字符串字符来构建新字符串按字符并将原始字符添加到新字符串或添加 %20
到它。
在 FP 中,循环通常通过递归完成,您的指令是使用递归,所以我们将改为这样做。
您的函数应该处理它给定的字符串中的第一个字符(保留它或用 %20
替换它),如果该字符是唯一的字符,则返回更新后的“字符;”否则,它应该返回更新后的字符,然后是将字符串的其余部分(除了第一个字符之外的所有字符)再次通过您的函数的结果。这将通过递归遍历整个字符串,构建新字符串。 (不需要数组,字符串连接和 substring
应该没问题。)
关于javascript - 这个问题可以只用函数式编程解决吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68600789/