클린코드 자바스크립트 5-2 배열 다루기(유사 배열 객체, 불변성, for문 배열 고차 함수로 리팩토링)
Clean Code JS 강좌는 여러 절로 구성되어 있습니다.
- 클린코드 자바스크립트 1-1 변수 다루기(let & const 사용, function scope & block scope)
- 클린코드 자바스크립트 1-2 변수 다루기(전역 공간 사용 최소화,임시 변수 제거하기)
- 클린코드 자바스크립트 1-3 변수 다루기(호이스팅)
- 클린코드 자바스크립트 2-1 타입 다루기(타입 검사)
- 클린코드 자바스크립트 2-2 타입 다루기(undefined & null, eqeq 줄이기)
- 클린코드 자바스크립트 2-3 타입 다루기(형변환 주의하기, isNaN)
- 클린코드 자바스크립트 3-1 경계 다루기(min-max,begin-end,first-last,접두사와 접미사, 매개변수 순서가 경계)
- 클린코드 자바스크립트 4-1 분기 다루기(값식문, 삼항 연산자)
- 클린코드 자바스크립트 4-2 분기 다루기(truthy & falsy, 단락 회로 평가)
- 클린코드 자바스크립트 4-3 분기 다루기(else if & else 피하기, Early Return, Default case 고려하기)
- 클린코드 자바스크립트 4-4 분기 다루기(Default case 고려하기, Nullish coalescing operator, 드모르간 법칙)
- 클린코드 자바스크립트 5-1 배열 다루기(JS의 배열은 객체다, Array.length, 배열 요소에 접근하기)
- 클린코드 자바스크립트 5-2 배열 다루기(유사 배열 객체, 불변성, for문 배열 고차 함수로 리팩토링)
- 클린코드 자바스크립트 5-3 배열 다루기(배열 메소드 체이닝 활용, map vs forEach, continue&break)
- 클린코드 자바스크립트 6-1 객체 다루기(Object Destructuring, Object.freeze)
- 클린코드 자바스크립트 6-2 객체 다루기(Prototype 조작 지양하기, hasOwnProperty, 직접 접근 지양하기)
- 클린코드 자바스크립트 7-1 함수 다루기([함수,메서드,생성자], argument & parameter,복잡한 인자 관리하기)
- 클린코드 자바스크립트 7-2 함수 다루기(default value, Rest Parameters, void & return, 화살표 함수)
- 클린코드 자바스크립트 7-3 함수 다루기(Callback Function, 순수 함수, Closure)
배열 다루기 😎
유사 배열 객체👍
- 객체를 배열로 바꿔주는 역할 (Array.from())
const arrayLikeObject = {
0: "HELLO",
1: "WORLD",
length: 2,
};
// 객체를 배열로 바꿔주는 역할
const arr = Array.from(arrayLikeObject);
console.log(Array.isArray(arr)); //true
console.log(Array.isArray(arrayLikeObject)); //false
console.log(arr); // ['HELLO','WORLD']
console.log(arr.length); // 2
- 유사 배열 객체는 forEach,map,reduce, filter 등 고차 함수를 사용할 수 없다.
function generatePriceList() {
console.log(Array.isArray(arguments)); //false
// 유사 배열 객체이기 문에 map, forEach, reduce, filter, every, some 기능이 되지 않는다.
for (let index = 0; index < arguments.length; index++) {
const element = arguments[index];
console.log(elements); // 100, 200, 300, 400, 500, 600
}
// return arguments.map((arg) => arg + "원");
}
generatePriceList(100, 200, 300, 400, 500, 600);
- 객체를 배열로 바꾸어 사용하면 고차 함수를 사용할 수 있다.
function generatePriceList2() {
Array.from(arguments).map((it) => return arg+'원';
}
const newList = generatePriceList(100, 200, 300, 400, 500, 600);
console.log(newList); // ['100원','200원' .....]
불변성👍
- 배열을 복사한다.
- 새로운 배열을 반환하는 메서드들을 활용한다. (filter, map, slice)
const originArray = ["123", "456", "789"];
const newArray = originArray;
originArray.push(10);
originArray.push(11);
originArray.push(12);
originArray.unshift(0);
console.log(originArray); // [0,'123','456','789',10,11,12]
console.log(newArray); // [0,'123','456','789',10,11,12]
- 배열을 복사할 경우, 객체 구조 분해 할당을 사용해본다.
const originArray = ["123", "456", "789"];
const newArray = [...originArray];
originArray.push(10);
originArray.push(11);
originArray.push(12);
originArray.unshift(0);
console.log(originArray); // [0,'123','456','789',10,11,12]
console.log(newArray); // ['123','456','789']
for문 배열 고차 함수로 리팩토링👍
const price = ["2000", "3000", "4000", "1000", "5000"];
function getWonPrice(priceList) {
let temp = [];
for (let i = 0; i < priceList.length; i++) {
temp.push(priceList[i] + "원");
}
return temp;
}
const result = getWonPrice(price);
function getWonPrice2(priceList) {
return priceList.map((price)) => {
it+'원'
})
}
const result = getWonPrice2(price);
- 요구사항🖐 : 1000원이상 추가로 필터
const price = ["2000", "3000", "4000", "1000", "5000"];
const suffixWon = (price) => price + "원";
const isOverOneThousand = (price) => Number(price) > 1000;
function getWonPrice(priceList) {
const isOverList = priceList.filter(isOverOneThousand);
return isOverList.map(suffixWon);
}
const result = getWonPrice(price);
- 요구사항🖐 : 정렬
const price = ["2000", "3000", "4000", "1000", "5000"];
const suffixWon = (price) => price + "원";
const isOverOneThousand = (price) => Number(price) > 1000;
const ascendingList = (a, b) => a - b;
function getWonPrice(priceList) {
const isOverList = priceList.filter(isOverOneThousand);
const sortList = isOverList.sort(ascendingList);
return isOverList.map(suffixWon);
}
const result = getWonPrice(price);
하지만 계속 요구사항이 많아진다면 어떻게 해결할까? 다음 챕터에..