체이닝 팁
데이터만들기 : 함수형 도구는 배열 전체를 다룰 때 잘 동작한다. 특정 배열중 일부를 다룰 때는 그 일부를 다른 배열로 생성해야 한다.
배열 전체 다루기 : map, filter, reduce로 배열을 처리한다.
작은 단계로 나누기 : 알고리즘이 한번에 많은 일을 한다면 두 단계 이상으로 나눈다.
조건문을 filter로 바꾸기
map filter reduce 말고도 다른 함수형 도구가 많다. 함수를 추출하고 좋은 이름을 붙여 사용하자
forEach() : 배열의 모든 요소에 대해 주어진 함수를 실행합니다. map()과 달리 새로운 배열을 반환하지 않습니다.
some() / every() : 배열의 요소 중 일부 또는 모든 요소가 조건을 만족하는지 확인합니다. some()은 적어도 하나의 요소가 조건을 만족하면 true를 반환하고, every()는 모든 요소가 조건을 만족하면 true를 반환합니다.
find() / findIndex() : 배열에서 조건을 만족하는 첫 번째 요소를 찾습니다. find()는 요소 자체를 반환하고, findIndex()는 해당 요소의 인덱스를 반환합니다.
concat() : 배열을 결합합니다. 이 함수는 기존 배열을 변경하지 않고 새로운 배열을 반환합니다.
slice() : 배열의 일부를 추출하여 새로운 배열을 반환합니다.
reduceRight() : reduce()와 유사하지만 배열의 끝에서부터 시작하여 적용합니다.
flatMap() : map()과 유사하지만, 중첩된 배열을 평평하게 만들어 1차원 배열로 만들어 줍니다.
zip() : 두 개 이상의 배열을 결합하여 각 배열의 요소를 조합합니다.
fromEntries() : 배열을 객체로 변환합니다. 이 함수는 Object.entries()와 반대 작업을 수행합니다.
compose() / pipe() : 함수를 조합하여 새로운 함수를 만듭니다. compose()는 오른쪽에서 왼쪽으로 함수를 적용하고, pipe()는 왼쪽에서 오른쪽으로 함수를 적용합니다.
curry() : 다중 인수 함수를 다른 함수의 시퀀스로 변환합니다. 이를 통해 함수를 부분 적용하고 인수를 순서대로 전달할 수 있습니다.
partial() / partialRight(): 함수에 인수 일부를 적용하여 새로운 함수를 반환합니다.
memoize() : 함수의 결과를 캐시하여 동일한 인수에 대해 다시 계산하지 않습니다.
tap() : 함수를 실행하고 인자를 반환합니다. 디버깅에 유용합니다.
throttle() / debounce() : 이벤트 처리에 사용되며, throttle()는 이벤트를 제한된 속도로 실행하고, debounce()는 마지막 이벤트를 기반으로 이벤트를 실행합니다.
flip() : 인수의 순서를 바꿉니다.
zipWith() : 두 개 이상의 배열을 결합하여 각 배열의 요소를 지정된 함수를 사용하여 조합합니다.
groupBy() : 배열을 객체의 그룹으로 변환합니다. 각 그룹은 주어진 함수에 의해 생성된 키로 식별됩니다.
uniq() : 배열에서 중복된 요소를 제거합니다.
sortBy() : 주어진 함수를 사용하여 배열을 정렬합니다.
pluck() : 객체 배열에서 지정된 속성을 추출합니다.
chunk() : 배열을 작은 배열로 나눕니다.
체이닝 디버깅을 위한 팁
const 구매 내역 = [a,b,c,d,e]
1. 장바구니에 없는 물건을 처음 입력하는 경우
2. 이미 장바구니에 있는 경우
if (장바구니에 item name이 없으면){
구매내역.reduce(addItem, {name, quantity:1, pricepriceLookup(item)})
}else{
const 수량 = cart[item].quantity;
cart[item].setFieldByName('quantity', quantity+1)
}
Chapter 14 중첩된 데이터에 함수형 도구 사용하기