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