原题:输入一串字符串,经过解析,如果连续数字的话,就取连续的第一个数和最后一个数,中间用~连接,如果不连续就用,隔开
如:输入'2,1,3,4,5,6,8,9' 输出'2,1,3~6,8~9'
解题思路:
1.字符串 -> 数组
2.定义变量:结果变量newarr,临时变量temp(用作记录 连续序列的开头)
3.遍历数组,cur(当前元素值)+1 和 next(后面一个元素的值)
cur + 1 === next 不作处理
cur + 1 !== next ,则表示遇到了新序列或者新的独立值,需要将上一个序列或者独立值记录下来
如果临时变量 !== 当前值,则表示是一个序列,结果变量push序列
如果临时变量 === 当前值,则表示是一个单独的值,结果变量push单独的值
动态更新临时变量的值(进入下一位)
function cut (str) { let arr = str.split(',').map(i => +i) let temp = arr[0], newarr = [] arr.forEach((item, index, arr) => { if (item+1 !== arr[index + 1]) { if (temp !== item) { newarr.push(`${temp}~${item}`) } else { newarr.push(`${temp}`) } temp = arr[index + 1] } }); return newarr.join() } cut('2,1,3,4,5,7,8,9') //'2,1,3~5,7~9'