함수들을 입력받아 함수들이 입력된 차례대로 결합된 새로운 함수를 리턴해야 합니다.
function square(num) {
return num * num;
}
function add5(num) {
return num + 5;
}
function mul3(num) {
return num * 3;
}
function isOdd(num) {
return num % 2 !== 0;
}
let output = pipe(add5, square);
console.log(output(4)); // --> 81
output = pipe(square, add5, mul3);
console.log(output(4)); // --> 63
output = pipe(square, mul3, add5, add5, isOdd);
console.log(output(4)); // --> false
1) 고차함수의 매개변수에 들어오는 함수에는 제한이 없다. 전개 문법을 사용하여 매개 변수에 들어올 함수를 배열화한다.
2) for문을 통해 처음 함수의 결과값이 다음 함수의 매개변수로 전달될 수 있도록 한다.
function pipe(...func) {
return function (num) {
let result = num;
for (let i = 0; i < func.length; i++) {
result = func[i](result)
}
return result
}
}
정수를 요소로 갖는 배열과 정수(num)를 입력받아 num을 배열에 추가하고 정렬한다고 가정할 경우, num의 인덱스를 리턴해야 합니다.
let output = getIndex([5, 4, 1, 3], 2);
console.log(output); // --> 1
output = getIndex([10, 5, 1, 3], 13);
console.log(output); // --> 4
1) num보다 작은 수로 filter된 배열을 구한다.
2) filter된 배열의 길이가 num의 인덱스 번호가 된다.
function getIndex(arr, num) {
return arr.filter(el => el < num).length
}
객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 100 보다 작은 요소들만 갖는 배열을 리턴해야 합니다.
const obj = {
key: [1000, 20, 50, 500],
};
let output = getElementsLessThan100AtProperty(obj, 'key');
console.log(output); // --> [20, 50]
1) obj[property]
가 배열인 경우에만, filter를 통해 100이하의 수로 정렬된 배열을 구할 수 있다.
2) filter 대신 lessThan100
함수를 사용해야 한다.
3) 배열 안에 있는 값이 number가 이어야만 한다.
4) 조건에 맞지 않는 경우
function lessThan100(number) {
return number < 100 && typeof number === 'number'
}
function getElementsLessThan100AtProperty(obj, property) {
const prop = obj[property];
if (Array.isArray(prop)){
return prop.filter(lessThan100);
}
return []
}
2차원 배열(배열을 요소로 갖는 배열)을 입력받아 배열들의 요소를 모두 담고 있는 단일 배열을 리턴해야 합니다.
let output = joinArrayOfArrays([
[1, 4],
[true, false],
['x', 'y'],
]);
console.log(output); // --> [1, 4, true, false, 'x', 'y']
1) 배열과 배열을 붙이는 array.prototype.concat() 메소드를 사용한다.
function joinArrayOfArrays(arr) {
return arr.reduce(((acc, cur) => acc.concat(cur)))
}