JS 배열은 크기 고정이 아니고 타입도 안 섞어도 되는 동적 배열이다(내부적으로는 최적화를 위해 타입이 균일할 때 더 빠르다). Rust의 Vec보다 훨씬 느슨하다.
const temps = [52.3, 67.8, 81.2, 60.0];
temps[0] // 52.3
temps.length // 4
temps[temps.length - 1] // 81.2, 마지막 원소
temps[99] // undefined, 범위 밖은 에러 없이 undefined
temps.push(90.1); // 끝에 추가, 새 length 리턴
temps.pop(); // 끝에서 제거하고 그 값 리턴
temps.unshift(40.0); // 앞에 추가 (느림 — 모든 원소를 밀어야 함)
temps.shift(); // 앞에서 제거
const temps = [52.3, 67.8, 81.2, 60.0, 65.0];
temps.slice(1, 3) // [67.8, 81.2] — 원본 그대로
temps.slice(-2) // [60.0, 65.0] — 뒤에서 2개
const removed = temps.splice(1, 2); // 원본에서 index 1부터 2개 제거
// temps는 이제 [52.3, 60.0, 65.0], removed는 [67.8, 81.2]
temps.splice(1, 0, 99); // 삭제 0개, index 1에 99 삽입
temps.includes(60.0) // true — 존재 여부만 필요할 때
temps.indexOf(60.0) // 몇 번째인지 필요할 때, 없으면 -1
Array.isArray(temps) // true — typeof는 배열도 "object"라서 못 씀
_submissions/day04.js과제 1. 최근 N개
function lastN(readings, n) {
// TODO: 배열 끝에서 n개를 새 배열로 리턴 (원본 훼손 금지)
}
// lastN([1,2,3,4,5], 2) → [4, 5]
// lastN([1,2,3], 10) → [1, 2, 3] (n이 더 커도 에러 없이)
과제 2. 이상치 제거
0°C 미만이거나 120°C 초과인 값은 센서 오류로 간주하고 제거하는 removeOutliers(readings)를 작성한다. 원본 배열은 건드리지 말고 새 배열을 리턴한다.
// removeOutliers([52.3, -5, 67.8, 999, 60.0]) → [52.3, 67.8, 60.0]
과제 3. 특정 구간 교체
splice를 이용해 replaceRange(arr, start, count, ...values)를 작성한다 — arr의 start부터 count개를 values로 교체하고, 원본 배열을 그대로 리턴한다(원본 수정 O, 이번엔 의도적으로).
// replaceRange([1,2,3,4,5], 1, 2, 9, 9, 9) → [1, 9, 9, 9, 4, 5]
과제 4 (도전). 슬라이딩 윈도우 평균
windowAverage(readings, size): 배열을 size 크기 구간으로 나눠서(마지막에 딱 안 맞으면 남는 만큼만) 각 구간의 평균을 담은 배열을 리턴한다.
// windowAverage([10,20,30,40,50], 2) → [15, 35, 50]
cd ~/Documents/javascript-2주완성
bun _grade.ts day04