我们有一个格式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类型作为列标题。
用于bugs = ['BD-2', 'SSNC-1', 'SSNC-3', 'RI-2', 'RC-10'].`数组
输出应该如下所示:
___________________________________
| BD SSNC RI RC |
|------+---------+--------+---------+
|BD-2 | SSNC-1, | RI-2 | RC-10 |
| | SSNC-3 | | |
|______|_________|________|_________|发布于 2016-02-17 09:18:43
我建议使用一个对象对匹配的标识符进行分组。
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。
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>');
发布于 2016-02-17 09:12:51
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
另一个编辑:现在使用一个集合不再有重复的条目。
发布于 2016-02-17 09:13:32
假设令牌名称只能有字母(或数字后面跟着字母表,如2BD)
试一试
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 );https://stackoverflow.com/questions/35451847
复制相似问题