有一段纯文本,还有一个单独的对象数组,描述其内部的格式,如下所示:
let text = "Привет, я текст.";
let format = [
{
type: "bold",
start: 0,
end: 6
},
{
type: "italic",
start: 0,
end: 1
},
{
type: "strike",
start: 9,
end: 14
},
];
因此,有必要对文本应用格式,将位置 到 的字符换行start到end相应的 html 标签中。种类较多,但主要原理如下。例如,它们可以定义如下:
const types = {
bold: {
start: "<b>",
end: "</b>"
},
italic: {
start: "<i>",
end: "</i>"
},
strike: {
start: "<del>",
end: "</del>"
},
other: {
start: "<span class='other'>",
end: "</span>"
},
};
预期结果:
<b><i>П</i>ривет<b>, я <del>текст</del>.
问题是,如果您只是将格式化对象一致地应用于同一文本,则索引将在第二步中移出。此外,开始和结束标签具有不同的可变长度。怎么做?
PS:你有一个
strike字段start,end需要向右移动1个字符简单选项:
我们将 format 转换为特定位置的标记数组,然后按插入索引对它们进行排序并插入:
此选项并未过度优化,因为它会在每个标记上插入文本。如果您使用非常大的数据数组并且需要更复杂和更快的选项,那么请写下来,我可以实现它。
但我认为这就足够了
我会提供这个选项。确实,
format我重建了原始数组......