如何在Typescript中把字母数字值转换为数值范围?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Typescript中把字母数字值转换为数值范围?相关的知识,希望对你有一定的参考价值。
myArray = ["AB01","AB02","AB03","AB04","AB11","BC12","BC13", "SB33"];
// expected string "AB01-AB04, AB11, BC12-BC13, SB33"
字母可以是一个或两个字符,数字可以是两个或三个字符,例如:A001, A002, AB001, AB002, AC01, AC02, B01, B02。数字可以是两个或三个字符,例如:A001, A002, AB001, AB002, AC01, AC02, B01, B02。
只有这些格式是可以的。
如何用简化的方式实现?
答案
let myArray = ["AB01","AB05","ABCDEFG01123","ABCDEFG01124","AB02","AB03","AB04","AB11","BC12","BC13", "SB33"];
function getRanges(array, group) {
var ranges = [], rstart, rend;
for (var i = 0; i < array.length; i++) {
rstart = array[i];
rend = rstart;
while (array[i + 1] - array[i] == 1) {
rend = array[i + 1];
i++;
}
ranges.push(rstart == rend ? group+rstart+'' : group+rstart + '-' + group+rend);
}
return ranges;
}
// group first.
let groups = myArray.reduce((groups,item)=>{
let belongsTo = item.match(/[a-zA-Z]/g).join('');
groups[belongsTo] ? groups[belongsTo].push(item) :groups[belongsTo]=[item];
return groups;
},{})
let expectedString = Object.entries(groups).reduce((output,[key,value])=>{
output=`${output}${output.length ? ', ' : ''}${getRanges(value.map(i=>i.match(/[0-9]/g).join('')),key)}`;
return output;
},'');
console.log(expectedString);
// expected string "AB01-AB04, AB11, BC12-BC13, SB33"
以上是关于如何在Typescript中把字母数字值转换为数值范围?的主要内容,如果未能解决你的问题,请参考以下文章
请问在excel中如何把数值YYYYMMDD转换为日期YYYY-MM-DD呢?如果直接设置单元格格式为日期,只能显示一连串