在 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

更新於:2020 年 11 月 23 日

716 次瀏覽

開啟你的職業生涯

完成課程以獲得認證

開始
廣告
© . All rights reserved.