如何在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中把字母数字值转换为数值范围?的主要内容,如果未能解决你的问题,请参考以下文章

如何使C++将数字转换为ASC2码表中对应的符号输出?

转换数字+字母字符串[关闭]

TypeScript:字符串转换为数字

如何在查询语句中把空值(null),输出为0?

请问在excel中如何把数值YYYYMMDD转换为日期YYYY-MM-DD呢?如果直接设置单元格格式为日期,只能显示一连串

如何在excel中把日期转换成纯数字