var1 = "string1"
var2 = "string2"
...
varn = "stringn"
var str = `${var1}${var2}${var3}${var4}...${varn}`;
1.在上面的表达式中获取str
的{{3}}是什么,给定vari
是string
?
2.与使用for
循环串联字符串相比,它有多快?
Edit1:添加了wiki链接
Edit2:@PatrickRoberts所说的另一个例子。这也是我的实际用例:
我正在使用node
,我需要使用XML
有效负载回复客户端。他们已经给了我XML
和各自XSD
的格式。这些是大而嵌套的XML
。我有数据(在JSON
中),我将使用反引号运算符“填充”XML
模板(作为字符串)。我想尽可能避免阻塞node
线程。
作为一个虚拟的例子:
let response =
`<CATALOG>
<CD>
<TITLE>${data.title}</TITLE>
<ARTIST>${data.artist}</ARTIST>
<COUNTRY>${data.country}</COUNTRY>
<COMPANY>${data.company}</COMPANY>
<PRICE>${data.price}</PRICE>
<YEAR>${data.year}</YEAR>
</CD>
<CATALOG>
`
答案 0 :(得分:0)
首先,一个(希望)令人信服的论据来捍卫我的一面 - 在这里踩你的意图。
<子> <rant>
子>
你真正需要问自己的问题是,你真的更喜欢效率,重新使用对你来说绝对没有意义吗?效率通常是A Good Thing™,但请记住,只能维持DRY代码。这个概念是不言自明的:如果你不重复自己,你可以减少不必要的操作,并且作为额外的好处,你的代码更易于维护。
除非您正在编写服务器,否则您希望以每秒数百个请求响应兆字节的XML,您开始关注字符串连接性能的效率水平永远不会发挥作用,所以在这种情况下,你应该考虑更重要的事情,比如如何让你的代码重复使用,这样你就不会一遍又一遍地重复实现同样的事情,每个调整都略有不同适合您特定用例的时间,就像您目前的情况一样。
</rant>
现在回答你的问题。因为我不知道你的&#34;真实&#34; XML看起来像,我将用一个非硬编码的解决方案来解决你的例子,即使API响应JSON也不需要实现更改。
// assuming you have valid object referenced by `data`
const data = {
title: 'Code Monkey',
artist: 'SKG',
country: 'US',
company: 'Stack Overflow',
price: '12.98',
year: 2006
};
function toXML ([key, value]) {
const tag = key.toUpperCase();
return `<${tag}>${value}</${tag}>`;
}
const response = `<CATALOG><CD>
${Object.entries(data).map(toXML).join('\n')}
</CD></CATALOG>`;
console.log(response);
&#13;
看到XML响应中的空格和顺序都不重要,这种方法比从JSON到XML的每个属性的硬编码更容易重复使用。
扩展此方法,您可以编写一个递归遍历数组和对象的方法,直到它达到原始值,根据各自的键将每个层次结构化为XML标记,但这假设您的JSON模式与XML模式匹配。稍微修改一下你的例子,看起来像这样:
// assuming you have valid object referenced by `data`
const data = {
catalog: [{
cd: {
title: 'Code Monkey',
artist: 'SKG',
country: 'US',
company: 'Stack Overflow',
price: '12.98',
year: 2006
}
}, {
cd: {
title: 'Mandelbrot Set',
artist: 'SKG',
country: 'US',
company: 'Stack Overflow',
price: '9.98',
year: 2004
}
}]
};
const XML = {
stringify (value) {
switch (typeof value) {
case 'object':
return (Array.isArray(value)
? value.map(XML.stringify)
: Object.entries(value).map(entryToXML)
).join('');
default:
return String(value);
}
}
};
function entryToXML ([key, value]) {
const tag = key.toUpperCase();
return `<${tag}>${XML.stringify(value)}</${tag}>`;
}
const response = XML.stringify(data);
console.log(response);
&#13;