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