[1,2,3,4,6,7,9,13,15]=>['1->4','6->7','9','13','15']
本题是一道比较简单的数组处理题目,主要有两个处理步骤:
- 将超过一个的连续数字元素,合并成
x->y
,比如 [1,2,3,4] 转成 ['1->4']
- 将非连续的数字元素,转成字符串
具体的实现代码如下:
function shortenArray(arr) {
// 处理边界
if (!Array.isArray(arr) || arr.length <= 1) {
return arr;
}
// 记录结果
const result = [];
// 记录连续数字的开始位置
let start = 0;
// 记录连续数字的结束位置
let last = 0;
function pushArr(arrStart, arrEnd) {
if (arrStart === arrEnd) {
result.push(arr[arrStart].toString());
} else {
result.push(`${arr[arrStart]}->${arr[arrEnd]}`);
}
}
// 一次循环获取结果
for (let i = 1; i < arr.length; i++) {
const temp = arr[i];
if (arr[last] + 1 === temp) {
last = i;
} else {
pushArr(start, last);
start = i;
last = i;
}
}
// 处理剩余数据
pushArr(start, last);
return result;
}
shortenArray([1, 2, 3, 4, 6, 7, 9, 13, 15]); // ['1->4','6->7','9','13','15']