【发布时间】:2020-09-07 08:44:17
【问题描述】:
我有一个标记模板文字片段构建器,看起来像这样:
function fragment(chunks, ...args) {
return new Fragment(chunks, args);
};
class Fragment {
constructor(chunks, args) {
this.chunks = chunks;
this.args = args;
}
}
这个想法是能够将标记的模板文字拆分为不同的部分,并拥有一个 merge 函数,该函数将任意深度嵌套的片段树转换为 chunks 数组和 args 数组,就好像它只是一个数组一样以 :
function f() {}
function g() {}
const part = fragment`A ${f} B`
const nested = fragment`C ${part} D ${g} E ${part}`
const [chunks, args] = merge(nested)
console.log(chunks) // ["C A ", " B D ", " E A ", " B"]
console.log(args) // [function f, function g, function f]
实现merge 的最佳和最有效的算法是什么?谢谢。
【问题讨论】:
-
为什么之后在
merge中这样做,而不是直接在Fragment构造函数中?你甚至不需要在那里处理递归。 -
@Bergi 因为
merge是更一般的情况。如果我有一个算法可以直接在Fragment构造函数中合并,那么我只需要向它添加一个递归即可得到merge。所以一个或另一个解决了我的问题。
标签: javascript algorithm template-literals