Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tạo chuỗi trình tự từ mảng trong JavaScript


Giả sử chúng ta có một mảng số đã sắp xếp như sau, nơi có thể có các số liên tiếp.

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

Chúng ta cần viết một hàm JavaScript nhận một mảng như vậy.

Hàm sẽ tạo một chuỗi trình tự cho mảng này. Chuỗi trình tự sao cho đối với tất cả các phần tử liên tiếp của mảng, chúng ta chỉ viết số bắt đầu và số kết thúc, thay thế các số ở giữa bằng dấu gạch ngang (-), và giữ nguyên tất cả các số khác.

Do đó, với mảng trên, đầu ra sẽ trông như:

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

Ví dụ

Mã thực hiện:

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));

Kết quả

Kết quả trong console:

1-3,5,7-9,11