[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']