用JavaScript在数组之外形成序列

假设我们有一个这样的数字数组,可以有连续的数字。

const arr = [1, 2, 3, 5, 7, 8, 9, 11];

我们需要编写一个采用这样一个数组的JavaScript函数。

我们的函数应该为此数组形成一个序列。该顺序应使得对于数组的所有连续元素,我们只需要编写起始数字和结束数字就可以用破折号(-)替换中间的数字,并保持所有其他数字不变。

因此,对于上述数组,输出应类似于-

const output = '1-3,5,7-9,11';

示例

为此的代码将是-

const arr = [1, 2, 3, 5, 7, 8, 9, 11];
const buildSequence = (arr = []) => {
   let pointer;
   return arr.reduce((acc, val, ind) => {
      if (val + 1 === arr[++ind]) {
         if (pointer == null ) {
            pointer = val;
         };
         return acc;
      };
      if (pointer) {
         acc.push(`${pointer}-${val}`);
         pointer = null;
         return acc;
      }
      acc.push(val);
      return acc;
   }, []).join(',');
}
console.log(buildSequence(arr));

输出结果

控制台中的输出将是-

1-3,5,7-9,11