【发布时间】:2014-05-16 21:10:23
【问题描述】:
我正在尝试使用函数式编程来解决特定问题。我的猜测是折叠应该可以完成这项工作,但到目前为止,我还没有找到解决方案。
从像 "a.b.c" 这样的点分隔字符串开始,我想构建一个 Javascript 对象,它在 JS 文字符号中看起来像:
obj = {a:{b:{c:"whatever"}}}
算法应该接受一个种子对象开始。在前面的例子中,种子是{}。
如果我提供{a:{f:"whatever else"}} 作为种子,结果将是
{a:{f:"whatever else",b:{c:"whatever"}}}
我希望我的描述足够清楚。我不是在谈论字符串操作。我想创建合适的对象。
我正在使用 Javascript,因为这是出现这个现实世界问题的语言,我将在其中实施我希望通过在这里询问找到的 FP 解决方案。
编辑:我要解决的主要问题是如何避免可变对象。 JS 在添加/删除属性方面过于宽松,在这种情况下,我想确保在 FP 例程运行期间不会有副作用。
【问题讨论】:
-
为什么专注于FP?您是否已经有了没有 FP 的解决方案?请向我们展示您的尝试以及您遇到的问题。
-
我专注于 FP,因为我想利用不变性。非 FP 解决方案是一个迭代器,它进入种子并对其进行变异。我正在尝试使用正确折叠的解决方案。我的结果与种子
{}一起工作正常,但在复杂种子的情况下失败。 -
必须找到我当前的折叠正确解决方案并将其发布在这里。抱歉,今天下午时间太少了:-)
-
您的意思是对于
{a:{f:"whatever else"}}示例,您想返回一个副本 而不是改变种子?
标签: javascript algorithm functional-programming fold