js处理数字字符串是连续或单独显示函数

一, 传入字符串,处理完 返回字符串

  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))

你可能感兴趣的:(js处理数字字符串是连续或单独显示函数)