오늘 공부한 내용 요약
어제 마무리하지 못했던 퀴즈를 마무리해보겠다.
let arr1 = [];
for (let i = 1; i <101; i++) {
arr1.push(i);
}
1) filter()이용
let arr1 = [];
for (let i = 100; i > 0; i--) {
arr1.unshift(i);
}
let arr2 = arr1.filter( function(n) {
if(n % 2 == 0) {
return n;
}
});
alert(arr2); // 2,4,6...100
어제 풀이했던 fillter 활용방법이다.
이제 map()을 이용할 수 있게 고민해보았다. 그 결과 효율적으로 보이진 않지만 답을 구할 수 있는 방법을 찾을 수 있었다.
2) map()과 filter() 이용
let arr2 = arr1.map(function(n) {
if(n%2 == 0) {
return n;
}
});
let arr3 = arr2.filter(function(n) {
return (n !== undefined);
});
alert(arr3); // 2,4,6...100
3) reduce 이용
let arr1 = [];
for (let i = 1;i < 101; i++) {
arr1.push(i);
}
let arr2 = arr1.reduce((a,b) => {
if (b % 2==0) a.push(b);
return a;
},[]);
alert(arr2); // 2,4,6...100
map과 forEach를 사용해도 가능한지 모르겠지만 구현해보는데 실패했다
( 모던 JavaScript 튜토리얼 학습 )
함수 표현식과 함수 선언문 외에 함수를 만드는 또하나의 방법
(인수를 한꺼번에 모아 전달 가능한 방법)
let func = new Function ([arg1, arg2, ...argN], functionBody
functionBody = 함수 본문
new Function('a', 'b', 'return a + b'); // 기본 문법
new Function('a,b', 'return a + b'); // 쉼표로 구분
new Function('a , b', 'return a + b'); // 쉼표와 공백으로 구분
function getFunc() {
let value = "test";
let func = new Function('alert(value)');
return func;
}
getFunc()();
참고 사이트
위의 내용은 공부중 본인이 이해한 내용으로 몇몇 틀린 내용이 있을 수 있습니다.
회독중 발견시 수정하겠습니다
filter와 map 또한 reduce를 이용해 구현할 수 있는 메소드이고 본문의 문제는 filter를 쓰는게 가장 깔끔하죠.
만약 "꼭" map을 써야 되는 환경이라면, 그냥 배열 하나를 미리 선언해두고 map의 콜백에서 배열 하나에 짝수일때마다 push하게 만들었을 것 같네요.
arr1 = [1....100];
arr2 = [];
arr1.map(function(v) { if (v % 2 === 0) arr2.push(v); });
잘 읽었습니다.