Javascript 合并标记模板文本片段:最佳算法?

Javascript 合并标记模板文本片段:最佳算法?,javascript,algorithm,template-literals,Javascript,Algorithm,Template Literals,我有一个标记的模板文字片段生成器,如下所示: 函数片段(块,…参数){ 返回新片段(块、参数); }; 类片段{ 构造函数(块、参数){ this.chunks=块; this.args=args; } } 其想法是能够将标记的模板文本拆分为不同的部分,并具有一个merge函数,该函数可以将任意深度嵌套的片段树转换为chunks数组和args数组,就好像它只是一个大的标记模板文本一样: 函数f(){} 函数g(){} const part=fragment`A${f}B` const nest

我有一个标记的模板文字片段生成器,如下所示:

函数片段(块,…参数){
返回新片段(块、参数);
};
类片段{
构造函数(块、参数){
this.chunks=块;
this.args=args;
}
}
其想法是能够将标记的模板文本拆分为不同的部分,并具有一个
merge
函数,该函数可以将任意深度嵌套的片段树转换为
chunks
数组和
args
数组,就好像它只是一个大的标记模板文本一样:

函数f(){}
函数g(){}
const part=fragment`A${f}B`
const nested=fragment`C${part}D${g}E${part}`
常量[块,参数]=合并(嵌套)
console.log(块)/[“ca”、“bd”、“ea”、“B”]
console.log(args)/[函数f、函数g、函数f]

实现
合并
的最佳和最有效的算法是什么?谢谢。

这有点难看,因为模板文字有两个,但我要做的是:

function mergeInto(target, acc, {chunks: srcChunks, args: srcArgs}) {
    const {chunks: targetChunks, args: targetArgs} = target;
    for (var i=0; i<srcArgs.length; i++) {
        acc += srcChunks[i];
        if (srcArgs[i] instanceof Fragment) {
            acc = mergeInto(target, acc, srcArgs[i]);
        } else {
            targetChunks.push(acc);
            targetArgs.push(srcArgs[i]);
            acc = "";
        }
    }
    return acc + srcChunks[i];
}

function merge(fragment) {
    const chunks = [], args = [];
    chunks.push(mergeInto({chunks, args}, "", fragment));
    return [chunks, args];
}
函数合并到(目标,acc,{chunks:srcChunks,args:srcArgs}){
const{chunks:targetChunks,args:targetArgs}=target;

对于(var i=0;i这里有另一种解释,尽管在没有看到更多数据样本的情况下,我对它的执行没有充分的信心。简言之,如果在
fragment
函数中处理
chunk
args
的管理,则不需要使用
merge
函数

函数片段(块,…参数){
设为[];
设args=[];
对于(i=0;iconsole.log(nested.args)/[函数f、函数g、函数f]
为什么之后要在
合并
中这样做,而不仅仅是直接在
片段
构造函数中?你甚至不需要在那里处理递归。@Bergi因为
合并
是更一般的情况。如果我有一个算法可以直接在
片段
构造函数中合并,那么我只需要添加一个递归这样,一个或另一个解决了我的问题。