javascript - 仅使用函数式编程可以解决此问题吗?
问题描述
提示是:
创建一个接收字符串并返回字符串的“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))
解决方案
是的,你可以用 FP 做到这一点。根据我如何提出和回答家庭作业问题?,我不会用代码回复,而是用指针回复。
如果您没有使用 FP 执行此操作(但仍然必须自己编写而不是使用 stringreplace
方法等),您可能会使用循环通过逐个字符循环原始字符串来构建新字符串,并且将原始字符添加到新字符串或添加%20
到它。
在 FP 中,循环通常是通过递归完成的,您的指令是使用递归,所以我们将这样做。
您的函数应该处理给定字符串中的第一个字符(保留它或用 替换它%20
),如果该字符是唯一的字符,则返回更新后的“字符;” 否则,它应该返回更新的字符,然后返回将字符串的其余部分(除第一个字符之外的所有字符)再次通过您的函数的结果。这将通过递归遍历整个字符串,构建新字符串。(不需要数组,字符串连接,substring
应该没问题。)
推荐阅读
- html - Del 标记在自闭段落中不正确
- php - 设置 ftp_get
- reactjs - 在类组件中反应 useForm 等效项
- scikit-learn - 可视化 predict_proba 进行多类分类
- java - 不能使 Spring 方面的最低顺序
- react-native - Redux 持久化 Moment.js 日期对象以及字符串化和解析 Moment.js
- mysql - MySQL 从生日开始检查年龄
- javascript - 使用比率对数组进行排序
- python - 将 3 维数组的形状减少为 2 维数组或 DataFrame,但将轴的条目作为列表嵌套在另一个轴中
- c++ - 如何将 boost::hana::map 转换为 lambdas