Javascript提供一个带有html标记名和字符串的数组,返回不带dom的html
Javascript字符串转换为不带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}`; 打破 大
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>