javascript 处理数组连号略写小算法

180 阅读1分钟

直接上代码:处理效果:["20~54", "125~136", "170~199", "261~300"]

function slightlyNumArr(arr, separator) {
    const result = []
    if (!arr || arr && arr.length === 0) {
        return result;
    }
    let group = '';
    arr.sort((a, b) => a - b).reduce((a, b, i) => {
        if(b-a===1){
            //相邻
           if(i===1){
              //开始
              group=a+separator;
           }
           if(arr.length===(i+1)){
              //结束
              group+=b
              result.push(group)
           }
        }else{
            //不相邻
            group+=a
            result.push(group)
            group=b+separator;
        }
        return b
    })
    return result
}
console.log(slightlyNumArr([20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,174,173,172,171,170,175,176,177,178,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,125,126,127,129,136,135,134,133,132,131,130,128,273,272,271,270,269,268,267,266,265,264,263,262,261,274,275,277,298,297,296,295,294,293,292,291,290,289,288,287,286,285,284,283,282,281,280,279,278,276,299,300],'~'));

// 输出结果:["20~54", "125~136", "170~199", "261~300"]