🛠️ 처음부터 만드는 Range — 숫자 범위로 배열 만들기
시작값부터 종료값까지 배열로 만드는 함수입니다. 루프 없이 범위를 생성할 때 유용합니다.
```javascript
const range = (start, end) => {
return Array.from({ length: end - start }, (_, i) => start + i);
};
range(1, 5); // [1, 2, 3, 4]
range(0, 3); // [0, 1, 2]
```
`Array.from()`의 두 번째 인자로 맵 함수를 전달해서 각 요소를 변환합니다.
```javascript
const range = (start, end, step = 1) => {
const result = [];
for (let i = start; i < end; i += step) {
result.push(i);
}
return result;
};
range(0, 10, 2); // [0, 2, 4, 6, 8]
range(5, 1, -1); // [5, 4, 3, 2]
```
```javascript
function* range(start, end, step = 1) {
for (let i = start; i < end; i += step) {
yield i;
}
}
// 지연 평가: 필요한 만큼만 생성
const gen = range(0, 1000000, 2);
for (const num of gen) {
if (num > 100) break;
console.log(num);
}
```
제너레이터는 메모리를 아낄 수 있어서 큰 범위를 다룰 때 좋습니다.
```javascript
// 테이블 행 번호
const rows = range(1, 11); // [1, 2, ..., 10]
// 시간대 배열
const hours = range(0, 24); // [0, 1, ..., 23]
// 다른 함수와 조합
range(1, 5).map(x => x * x); // [1, 4, 9, 16]
```
배열이 필요하면 `Array.from()` 버전, 큰 범위를 처리해야 하면 제너레이터 버전을 선택하세요.
기본 구현
```javascript
const range = (start, end) => {
return Array.from({ length: end - start }, (_, i) => start + i);
};
range(1, 5); // [1, 2, 3, 4]
range(0, 3); // [0, 1, 2]
```
`Array.from()`의 두 번째 인자로 맵 함수를 전달해서 각 요소를 변환합니다.
Step 파라미터 추가
```javascript
const range = (start, end, step = 1) => {
const result = [];
for (let i = start; i < end; i += step) {
result.push(i);
}
return result;
};
range(0, 10, 2); // [0, 2, 4, 6, 8]
range(5, 1, -1); // [5, 4, 3, 2]
```
고급: 제너레이터 버전
```javascript
function* range(start, end, step = 1) {
for (let i = start; i < end; i += step) {
yield i;
}
}
// 지연 평가: 필요한 만큼만 생성
const gen = range(0, 1000000, 2);
for (const num of gen) {
if (num > 100) break;
console.log(num);
}
```
제너레이터는 메모리를 아낄 수 있어서 큰 범위를 다룰 때 좋습니다.
활용 예
```javascript
// 테이블 행 번호
const rows = range(1, 11); // [1, 2, ..., 10]
// 시간대 배열
const hours = range(0, 24); // [0, 1, ..., 23]
// 다른 함수와 조합
range(1, 5).map(x => x * x); // [1, 4, 9, 16]
```
배열이 필요하면 `Array.from()` 버전, 큰 범위를 처리해야 하면 제너레이터 버전을 선택하세요.
👁 0 views
Comments (0)
💬
No comments yet.
Be the first to comment!