在这方面,我看到了各种相关的话题,但似乎没有一个答案有效和/或与我的确切问题无关。
我有一串由脚本格式化并保存为var的数据。变量的一个示例一旦格式化,输出如下所示:
美国广播公司,123,XXXXXX,22,马克,XXXX.DEF,345,XXX,XX,46,ORL,093782
每个新集合的开头都用'.‘表示。(除第一个值外)和集合中的每一段数据都用',‘分隔。同样的格式将继续使用大约15个条目,没有统一大小的条目,一些包含3-4个数据,还有一些包含10个或更多的数据。
我希望能够以警报()的形式输出这些数据,如下所示:
<Group>
<Set name = "ABC">
<Entry name = "1">123</Entry>
<Entry name = "2">XXXXXX</Entry>
<Entry name = "3">22</Entry>
<Entry name = "4">MARK</Entry>
<Entry name = "5">XXXX</Entry>
</Set>
<Set name = "DEF">
<Entry name = "1">345</Entry>
<Entry name = "2">XXX</Entry>
<Entry name = "3">XX</Entry>
<Entry name = "4">46</Entry>
<Entry name = "5">ORL</Entry>
<Entry name = "6">093782</Entry>
</Set>
</Group>问题:,我该怎么做?
发布于 2018-04-12 05:32:48
您的<Entry有</Set>s的结束标记,我猜这只是一个错误吗?
由于您说要在警报中输出数据,所以只需要一个字符串,使用Array方法很容易构建该字符串:
const input = 'ABC,123,XXXXXX,22,MARK,XXXX.DEF,345,XXX,XX,46,ORL,093782';
const allSetsStr = input.split('.')
.map(commaSeparatedStr => commaSeparatedStr.split(','))
// if you want to filter out sets with an entryName of 345:
.filter(([, ...entryNames]) => !entryNames.includes('345'))
.map(([setName, ...entryNames]) => {
const allEntrysString = entryNames
.map((entryName, entryI) => ` <Entry name = "${entryI}">${entryName}</Entry>`)
.join('\n');
return ` <Set name=${setName}>
${allEntrysString}
</Set>`;
})
.join('\n');
const outputStr = '<Group>\n' + allSetsStr + '\n</Group>';
console.log(outputStr);
https://stackoverflow.com/questions/49771551
复制相似问题