function returnFunction() {
return function() {
return 'Hello HoF!'
}
}
function functionParameter(func, num) {
return func(num)
}
함수와 수(num)를 입력받아 num에 함수를 두 번(twice) 적용(apply)한 결과를 리턴
function applyTwice(func, num) {
return func(func(num))
}
가까운 순서대로 적용
function compose(func1, func2, num) {
return(func1(func2(num)))
}
두 개의 함수가 결합된 새로운 함수
function compose2(func1, func2) {
return function (num) {
return func1(func2(num))
}
}
function pipe(...funcN) {
return function(num) {
let result = num
for (let i = 0; i<funcN.length; i++) {
result = funcN[i](result)
}
return result
}
}
// 입력된 차례대로
// 새로운 함수를 리턴
함수를 입력받아 조건 별로 동작 수행
function callbackOnly(callback, response) {
if (response.status === 'success'){
return callback(response.data)
} else {
return 'Something went wrong!'
}
}
function mapCallback(func, arr) {
let result = [];
for (let el of arr) {
result.push(func(el))
}
return result
}
배열을 돌면서 result 배열에 함수가 적용된 배열 요소를 추가한다
결과가 참인 요소만을 추가한 배열
function filterCallback(func, arr) {
let result = [];
for (let el of arr){
if(func(el)){
result.push(el)
}
}
return result
}
배열의 요소를 돌면서 함수 내 요소를 적용 시켰을 때 true 값이 나오는 (===true) 요소를 result 배열에 추가하여 리턴
임의의 값과 배열을 비교해서 같은 값을 제외한 배열을 출력
function removeElement(arr, discarder) {
return arr.filter (function (el) {
if (el !== discarder) {
return true
} else {
return false
}
})
}
.filter를 사용하여 discarder 와 같지 않은 요소들은 그대로 두고, 같은 요소들은 제외시킨다.
위와 반대로 일치하는 요소만을 출력. 그냥 반대로 쓰면 된다
function keep(arr, keeper) {
return arr.filter (function(a){
if (a === keeper) {
return true
}
return false
})
}
이때 당시 el이 왜 자꾸 튀어나오는지 몰라서 a를 넣었는데
그냥 변수였을 뿐... 하지만 남들이 다 이렇게 보기좋은 변수를 지정해 놓은 거겠지?
마치 수학에서 함수 변수는 x인것처럼...
문자 배열중에 문자의 길이가 홀수인 문자만 골라서 배열을 만든다
function filterOddLengthWords(words) {
return words.filter(function(el){
if (el.length % 2 === 1) {
return true
}
return false
})
}
filter함수를 이용해서 길이가 홀수인 아이들을 골라낸다!
정수를 요소로 갖는 배열과 정수(num)를 입력받아 num을 배열에 추가하고 정렬한다고 가정할 경우, num의 인덱스를 리턴해야 합니다.
function getIndex(arr, num) {
return arr.filter (function(el){
return el < num
}).length //arr[마지막 인덱스] + 1 을 반환
}
filter를 이용해서 배열의 요소가 입력받은 숫자보다 작은 경우를 걸러낸다
이때 새로 생성한(걸러진) 배열의 길이를 구하면 num의 인덱스를 구할 수 있음.
객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 100 보다 작은 요소들만 갖는 배열을 리턴해야 합니다.
function lessThan100(number) {
return number < 100;
}
function getElementsLessThan100AtProperty(obj, property) {
const array1 = obj[property]
if (Array.isArray(array1)){
return array1.filter (function(el){
return typeof el === 'number' && lessThan100(el)
}) // 타입이 el이 number가 아닌 경우 false를 리턴
}
return [];
}
숫자가 100보다 작은 숫자를 출력하는 함수를 먼저 생성
그리고 객체의 요소값을 나열하는 배열을 두번째 함수에 만든다.
조건문을 이용해서 배열이라면, filter를 이용해서 그 요소가 숫자이고 100보다 작은 숫자를 걸러내어
그 배열을 리턴한다.