Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript将数组元素分类并输出为HTML_Javascript - Fatal编程技术网

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"
  ]
}