我有一系列这种格式的邮政编码(各个国家的):
["100-1001","102-1000","102-1001","102-1002","100-1002","111","112","102-1003","113"]
我需要以以下输出格式从这些数字中推断出范围:
[[upper1,lower1],[upper2,lower2]]
对于上面的示例,这将是:
[["100-1001","100-1002"]["102-1000","102-1003"]["111","113"]]
有没有比将所有内容转换为平面数字、删除分隔符、推断其范围然后重新添加分隔符更好的方法?
目前我对非连字符的邮政编码有这个逻辑 -
getRanges(zipCodes) {
zipCodes.sort();
let length = 1;
let ranges = [];
for (let i = 1; i <= zipCodes.length; i++) {
if (i == zipCodes.length || zipCodes[i] - zipCodes[i - 1] != 1) {
if (length == 1) {
let upper = lower = zipCodes[i - length];
ranges.push({lower, upper});
}
else {
let lower = zipCodes[i - length];
let upper = zipCodes[i - 1];
ranges.push({lower, upper});
}
length = 1;
}
else {
length++;
}
}
return ranges;
}
但是我觉得如果有更好的解析范围的方法,可以避免删除和重新添加分隔符的额外开销。提前致谢