首页 > 解决方案 > 仅使用函数式编程可以解决此问题吗?

问题描述

提示是:

创建一个接收字符串并返回字符串的“URL 版本”的函数。这仅涉及用 %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))

标签: javascriptarraysstringfunctional-programmingimmutability

解决方案


是的,你可以用 FP 做到这一点。根据我如何提出和回答家庭作业问题?,我不会用代码回复,而是用指针回复。

如果您没有使用 FP 执行此操作(但仍然必须自己编写而不是使用 stringreplace方法等),您可能会使用循环通过逐个字符循环原始字符串来构建新字符串,并且将原始字符添加到新字符串或添加%20到它。

在 FP 中,循环通常是通过递归完成的,您的指令是使用递归,所以我们将这样做。

您的函数应该处理给定字符串中的第一个字符(保留它或用 替换它%20),如果该字符是唯一的字符,则返回更新后的“字符;” 否则,它应该返回更新的字符,然后返回将字符串的其余部分(除第一个字符之外的所有字符)再次通过您的函数的结果。这将通过递归遍历整个字符串,构建新字符串。(不需要数组,字符串连接,substring应该没问题。)


推荐阅读