배열을 다룰 때, if
대신 filter
를 이용하여
한번에 여러 배열에 조건을 거는 방식이다.
빠르게 코드로 이해를 해보자
function newArr(n) {
let i = 1;
const res = [];
while (i < n) res.push(i++);
return res;
}
function solution1(n){
const arr1 = newArr(n);
let arr2 = [];
for(let i = 0; i < arr1.length; i++){
arr1[i] *= 2;
if(arr1[i] % 4 === 0){
arr2.push(arr1[i]);
}
}
console.log(arr2);
}
solution1(10); // expected [4, 8, 12, 16]
다음과 같은 코드를 한번 건들여보겠습니다.
function solution2(n){
const arr1 = newArr(n);
for(let i = 0; i < arr1.length; i++){
arr1[i] *= 2;
}
const arr2 = arr1.filter((v) => v % 4 === 0);
console.log(arr2);
}
solution2(10); // expected [4, 8, 12, 16]
Array.prototype.filter()
를 이용하여 줄여보았습니다.
그 다음 솔루션은 역시 FxTs
를 이용해보겠습니다.
function solution3(n){
const arr2 = pipe(
newArr(n),
map(v => v * 2),
filter(v => v % 4 === 0),
toArray
);
console.log(arr2);
}
solution3(10); // expected [4, 8, 12, 16]
끗
사실 FP
를 지향하는 이유는 유지보수하기 편한 코드가 아닐까싶네요