首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组元素和输出归类为JavaScript的

将数组元素和输出归类为JavaScript的
EN

Stack Overflow用户
提问于 2016-02-17 08:53:32
回答 4查看 1.1K关注 0票数 3

我们有一个格式bugs = ['BD-2', 'SSNC-1', 'SSNC-3', 'RI-2', 'RC-10']的数组。

您可以看到它有4种不同的bug类型/令牌(BD、SSNC、RI和RC) --这在将来可能会扩展。令牌和ID号分隔符可以是'-‘或'/’或无(例如: regexp match-/?)呃,数组可以是

代码语言:javascript
复制
= ['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类型作为列标题。

用于bugs = ['BD-2', 'SSNC-1', 'SSNC-3', 'RI-2', 'RC-10'].`数组

输出应该如下所示:

代码语言:javascript
复制
 ___________________________________
| BD      SSNC        RI      RC    |
|------+---------+--------+---------+
|BD-2  | SSNC-1, |   RI-2 |  RC-10  |
|      | SSNC-3  |        |         |
|______|_________|________|_________|
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-17 09:18:43

我建议使用一个对象对匹配的标识符进行分组。

代码语言:javascript
复制
var data = ['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'],
    grouped = function (data) {
        var o = {};
        data.forEach(function (a) {
            var group = a.match(/^[a-zA-Z]+/);
            o[group] = o[group] || [];
            o[group].push(a);
        });
        return o;
    }(data);

document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');

更新,结果与不同的令牌和id。

代码语言:javascript
复制
var data = ['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'],
    grouped = function (data) {
        var o = {}, r = {};
        data.forEach(function (a) {
            var group = a.match(/^[a-zA-Z]+/),
                number = a.match(/\d+$/);
            o[group] = o[group] || {};
            r[group] = r[group] || [];
            if (!(number in o[group])) {
                o[group][number] = r[group].push(a) - 1;
            }
            if (r[group][o[group][number]] !== a) {
                r[group][o[group][number]] = group + '-' + number;
            }
        });
        return r;
    }(data);

document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');

票数 3
EN

Stack Overflow用户

发布于 2016-02-17 09:12:51

代码语言:javascript
复制
bugs = ['BD-2', 'SSNC-1', 'SSNC-3', 'RI-2', 'RC-10'];

sortedBugs = [];

bugs.forEach(function(bug){
    match = bug.match(/([a-zA-Z]+)[ -/]{1}.*/);

    if(!sortedBugs[match[1]])
        sortedBugs[match[1]] = new Set();

    sortedBugs[match[1]].add(match[0]);
});

for(var x in sortedBugs)
{
    console.log("Bug Category '" + x + "':");

    sortedBugs[x].forEach(function(a) {console.log(a);});
}

现在,sortedBugs有四个条目,每个条目都包含一个对应bug的数组。因此,排序BD‘BD’只有'BD-2',而排序BD‘SSNC’有'SSNC-1‘和'SSNC-3’。

编辑:四个非常相似的解决方案,nices。:D

另一个编辑:现在使用一个集合不再有重复的条目。

票数 1
EN

Stack Overflow用户

发布于 2016-02-17 09:13:32

假设令牌名称只能有字母(或数字后面跟着字母表,如2BD)

试一试

代码语言:javascript
复制
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 );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35451847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档