Skip to content

实现以下转换,合并连续的数字

Posted on:2024年7月20日 at 17:42

[1,2,3,4,6,7,9,13,15]=>[‘1->4’,‘6->7’,‘9’,‘13’,‘15’]


本题是一道比较简单的数组处理题目,主要有两个处理步骤:

具体的实现代码如下:

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']
原文转自:https://fe.ecool.fun/topic/b41d5c3e-04c4-4873-867c-62ebf28ce369