Javascript提供一个带有html标记名和字符串的数组,返回不带dom的html

Javascript提供一个带有html标记名和字符串的数组,返回不带dom的html,javascript,html,arrays,dom,Javascript,Html,Arrays,Dom,Javascript字符串转换为不带dom的html。这适用于存储内容数据的内容管理系统 给定一个数组: var arr=[[['下划线','斜体'],'某些段落'] 显示输出: 某些段落 var getTag=function(标记,str){ var text=“”; 开关(标签){ 案例“”: text=`${str}`; 打破 “斜体”一词: text=`${str}`; 打破 案例“下划线”: text=`${str}`; 打破 “删除线”一案: text=`${str}`; 打破 大

Javascript字符串转换为不带dom的html。这适用于存储内容数据的内容管理系统

给定一个数组:

var arr=[[['下划线','斜体'],'某些段落']

显示输出:

某些段落

var getTag=function(标记,str){
var text=“”;
开关(标签){
案例“”:
text=`${str}

`; 打破 “斜体”一词: text=`${str}`; 打破 案例“下划线”: text=`${str}`; 打破 “删除线”一案: text=`${str}`; 打破 大小写“粗体”: text=`${str}`; 打破 违约: text=`; } 返回文本; }; arr[0]。映射((e)=>{ log(getTag(e,arr[1]); });
预期:

<u><i>some paragraph</i></u>
某个段落
实际:

<u>some paragraph</u>
<i>some paragraph</i>
某个段落
某段

一种方法是获得所需的结果,其中,对于每个reduce迭代,该迭代的当前
元素
围绕累积结果,如下所示

要获得所需的包装顺序,
元素
数组将首先通过调用来反转:

var arr=[[['下划线','斜体'],'某些段落'];
/*从arr中提取元素和内容数据*/
常量[元素,文本]=arr;
/*将元素减少到结果字符串中,以便使用每个元素包装结果
元素迭代*/
const result=elements.reverse().reduce((acc,element)=>{
开关(元件){
大小写“下划线”:
返回`${acc}`;
斜体字:
返回`${acc}`;
“删除线”一案:
返回`${acc}`;
大小写“粗体”:
返回`${acc}`;
}
返回acc;
},文本);

控制台日志(结果)
您可以创建一个
标记映射对象
,该对象包含开始标记和结束标记,首先在标记数组中循环以获取开始标记,然后添加文本,然后在反向标记上循环以获取结束标记

let tagsMap={
“:{开始:”,结束:

“}, 斜体:{开始:,结束:}, 下划线:{开始:,结束:}, 删除线:{开始:,结束:}, b:{开始:,结束:} } 让arr=[['下划线','斜体','某些段落']; 让getTag=([tags,text])=>{ 让final=“” //添加起始标记 tags.forEach(tag=>{ final+=tagsMap[tag]&&tagsMap[tag]。开始 }) //添加文本 最终+=文本; //添加结束标记 […标记].reverse().forEach(标记=>{ final+=tagsMap[tag]&&tagsMap[tag]。结束| |“” }) 返回决赛 }
log(getTag(arr))
另一种方法是从要替换的元素列表中的最后一个元素到第一个元素

比如:

var-arr=[
[‘下划线’、‘斜体’]、‘某些段落’
];
变量标记={
“下划线”:“u”,
'斜体':'我',
};
var formatted=arr[0]。reverse().reduce((描述,标记)=>{
通过使用返回`${description},初始值可以执行所需操作。注意:由于
reduce
的参数顺序,您必须切换所提供函数的参数顺序(我没有更改函数的实际内容)

编辑: 要保持顺序,您需要使用

var arr=[[['下划线','斜体'],'某些段落'];
var getTag=函数(str,tag){
var text=“”;
开关(标签){
案例“”:
text=`${str}

`; 打破 “斜体”一词: text=`${str}`; 打破 案例“下划线”: text=`${str}`; 打破 “删除线”一案: text=`${str}`; 打破 大小写“粗体”: text=`${str}`; 打破 违约: text=`; } 返回文本; }; var result=arr[0]。reduceRight(getTag,arr[1])
console.log(result);
执行此操作的一种方法是使
getTag
递归,仅在没有更多要应用的修饰符时返回文本:

var arr=[[['下划线','斜体'],'某些段落'];
var getTag=函数(arr){
如果(!arr[0].length)返回arr[1];
开关(arr[0].shift()){
案例“”:
text=''+getTag(arr)+'

'; 打破 “斜体”一词: text=''+getTag(arr)+''; 打破 案例“下划线”: text=''+getTag(arr)+''; 打破 “删除线”一案: text=''+getTag(arr)+''; 打破 大小写“粗体”: text=''+getTag(arr)+''; 打破 违约: 文本=''; 打破 } 返回文本; };
控制台日志(getTag(arr))
这个答案的另一个可能是,我们可以将
开关
块提取到一个函数,比如
getTags
getMarkup
,以便使用它independently@DacreDenny您的更新部分已由其他用户作为答案给出。我们可以参考该答案,而不是所需的输出
某些段落为了逆转TwitsTwitter来使用OrtheleTurt来保存OrthCoor,我不认为它简单,但仍然是另一种方式来完成这些事情,原因是我不认为它是简单的,这是我个人的意见,只要有可能,只要简单的迭代,我就不喜欢递归。这是一个需要递归解决的问题,因为我们正在以相同的方式将某些内容放入生成的内容中。无论如何,我将通过返回优惠来获得我的体育精神徽章…你可以创建运行片段,这样就可以了
<u>some paragraph</u>
<i>some paragraph</i>