연속된 숫자를 가질 수 있는 이와 같이 정렬된 숫자 배열이 있다고 가정합니다.
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