JavaScript将数组元素分类并输出为HTML
我们有一个格式为JavaScript将数组元素分类并输出为HTML,javascript,Javascript,我们有一个格式为bugs=['BD-2','SSNC-1','SSNC-3','RI-2','RC-10']的数组 您可以看到它有4种不同的bug类型/标记(BD、SSNC、RI和RC)-这可能会在将来扩展。令牌和ID号分隔符可以是“-”或“/”或“无”(例如:regexp match[-/]),也就是说,数组可以是 = ['BD-2', 'SSNC-1', 'SSNC-3', 'RI-2', 'RC-10'] or = ['BD-2', 'SSNC/1', 'SSNC-3', 'RI-2',
bugs=['BD-2','SSNC-1','SSNC-3','RI-2','RC-10']
的数组
您可以看到它有4种不同的bug类型/标记(BD、SSNC、RI和RC)-这可能会在将来扩展。令牌和ID号分隔符可以是“-”或“/”或“无”(例如:regexp match[-/]),也就是说,数组可以是
= ['BD-2', 'SSNC-1', 'SSNC-3', 'RI-2', 'RC-10'] or
= ['BD-2', 'SSNC/1', 'SSNC-3', 'RI-2', 'RC/10'] or
= ['BD-2', 'SSNC-1', 'SSNC3', 'RI-2', 'RC10']
现在尝试构建一个简单的JavaScript函数,该函数可以根据令牌类型将元素分类到单独的数组中,然后输出一个简单的HTML表,其中bugtoken类型作为列标题
对于错误数组=['BD-2','SSNC-1','SSNC-3','RI-2','RC-10']
`
输出应如下所示:
___________________________________
| BD SSNC RI RC |
|------+---------+--------+---------+
|BD-2 | SSNC-1, | RI-2 | RC-10 |
| | SSNC-3 | | |
|______|_________|________|_________|
现在,sortedBugs有四个条目,每个条目都包含一个对应bug的数组。因此,sortedBugs['BD']只有'BD-2',而sortedBugs['SSNC']有'SSNC-1'和'SSNC-3'
编辑:四个非常相似的解决方案,nices.:D
另一个编辑:现在通过使用集合不再有重复条目,假设令牌名称只能有字母(或数字后面跟字母,如2BD) 试一试
我建议使用对象与匹配的标识符进行分组
var数据=['BD-2'、'SSNC-1'、'SSNC-3'、'RI-2'、'RC-10'、'BD-2'、'SSNC/1'、'SSNC/3'、'RI/1'、'RC/10'、'BD-2'、'SSNC-1'、'SSNC3'、'RI-2'、'RC10'],
分组=功能(数据){
var o={};
data.forEach(函数(a){
变量组=a.match(/^[a-zA-Z]+/);
o[组]=o[组]| |[];
o[组].push(a);
});
返回o;
}(数据);
document.write(“”+JSON.stringify(分组,0,4)+“”)代码>问题已得到回答,但我有一个不同的解决方案,我想与大家分享
我最近创建了一个用JavaScript进行数组分类的库,名为
以下是使用它的解决方案:
{
"BD": [
"BD-2"
],
"SSNC": [
"SSNC-1",
"SSNC-3"
],
"RI": [
"RI-2"
],
"RC": [
"RC-10"
]
}
bugsCategorized
变量将包含以下对象:
您如何处理ID?分类数组应该是什么样子?更新了问题以澄清输出格式,比我的更优雅:)逻辑不错。。我们可以添加重复的过滤器吗,例如BD-2被重复,什么是具有SSNC-1
和SSNC/1
等值的过滤器?它们相等吗?很好,是的,它们相等只是输入者没有遵循正确的分隔符。。所以它们也应该被过滤。想要的样式是什么,非字符,-
或/
?非常好用。只是重复项没有被过滤掉。例如,如果数组中有相同令牌类型的副本,我们需要能够跳过它。。例如:错误=['BD-2'、'SSNC-1'、'SSNC-3'、'RI-2'、'RC-10'、'BD-2'、'SSNC-1'、'SSNC-3'、'RI-2'、'RC-10'];你是对的。这可以通过使用(新集合(sortedBugs[x])而不是sortedBugs[x]轻松解决。您也可以使用(新集合(sortedBugs[x])。forEach(.)等:)我们可以在sortedBugs阵列生成过程中过滤重复项吗?可以。我已经更改了上面的代码,我们现在只在第一个实例中使用一个集合。如果令牌和数字没有分隔符,那么逻辑将失败。例:SSNC1。regexp需要以下更改:match=bug.match(/([a-zA-Z]+)[-/]?.*/);谢谢,这是可行的,但只包括输出数组中的数字,但我们需要完整的bugIDnumber@sudheerg现在检查一下,在输出中添加的整个值工作得很好,只是我们需要在表中复制过滤器和HTML输出format@sudheerg删除重复项,请检查now@sudheerg就表格格式而言,有各种各样的例子,
var array = ['BD-2', 'SSNC-1', 'SSNC-3', 'RI-2', 'RC-10'];
var output = {};
array.forEach( function(value){
var number = (value.match( /\d+/g)).pop();
token = value.substring( 0, value.length - ( number.length ) ).replace(/[\W]/g,"");
if ( !output[token] )
{
output[token] = [];
}
if ( output[token].indexOf( value ) == -1 )
{
output[token].push( value );
}
} );
console.table( output );
const { categorize } = require("categorize");
const bugTypes = ["BD", "SSNC", "RI", "RC"];
const bugs = ["BD-2", "SSNC-1", "SSNC-3", "RI-2", "RC-10"];
const bugsCategorized = categorize(bugs, bugTypes.map((bugType) => ({
name: bugType,
filter: (bug) => bug.startsWith(bugType)
})));
{
"BD": [
"BD-2"
],
"SSNC": [
"SSNC-1",
"SSNC-3"
],
"RI": [
"RI-2"
],
"RC": [
"RC-10"
]
}