js处理数字字符串是连续或单独显示函数
2020-01-10 本文已影响0人
冬至_5b58
一, 传入字符串,处理完 返回字符串
function handlerAttendClassWeekStr (str) {
let arr = str.split(",").map(val=>Number(val)).sort((val1,val2)=>val1-val2);
let last = arr[0];
let n = 1;
let res = arr.reduce((prev,val,index)=>{
let _last = last;
last = val;
if(index===arr.length-1){
if(val===(_last+1)) return prev+"-"+val;
return prev+","+val;
}
else if(val===(_last+1)){
n++;
return prev;
}
else if(n===1){
n=1;
return prev+","+val;
}else{
n=1;
return prev+"-"+_last+","+val;
}
})
return res
}
二 ,处理的是数字的数组
var arr = [174, 176, 177, 178, 179, 180, 183, 189, 190]
function group(list) {
list = list.sort()
var tmp = []
list.forEach((item, index) => {
var prev = list[index - 1] //前一项
if (prev && item === prev + 1) {//有相邻前一项
if (typeof tmp[tmp.length - 1] === 'number') {//输出数组最后一项是数字
tmp[tmp.length - 1] = prev + '~' + item //拼接成字符串
} else {//输出数组最后一项是字符串
tmp[tmp.length - 1] = tmp[tmp.length - 1].split('~')[0] + '~' + item // 替换字符串最后的数字
}
} else {//没有前一相邻项或者没有前一项
tmp.push(item)
}
})
return tmp
}
console.log(group(arr))