함수들을 입력받아 함수들이 입력된 차례대로 결합된 새로운 함수를 리턴해야 한다.
function pipe(...func) {
return function(num) {
let output = num;
for (let i = 0; i < func.length; i++) {
output = func[i](output);
}
return output;
}
}
정수를 요소로 갖는 배열과 정수(num)를 입력받아 num을 배열에 추가하고 정렬한다고 가정할 경우, num의 인덱스를 리턴해야 한다.
입력받은 수 num을 주어진 배열 arr에 추가하고 '정렬'해줘야 한다.
예시) arr = [5, 4, 1, 3] , num = 2 / 추가 → [5, 4, 1, 3, 2] / 정렬 → [1, 2, 3, 4, 5]
function getIndex(arr, num) {
let index = arr.filter(function(element) {
return num > element;
})
return index.length;
}
객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 100 보다 작은 요소들만 갖는 배열을 리턴해야 한다.
function lessThan100(number) {
return number < 100;
}
function getElementsLessThan100AtProperty(obj, property) {
1. 새로운 배열 arr를 선언 후 객체의 키에 해당하는 값을 할당해준다.
let arr = obj[property];
2. 키에 해당하는 값이 배열이고,
배열에 있는 요소가 숫자이면서 100 미만일 경우를 필터링해준다.
이때 보조함수 lessThan100을 이용하여 100 미만인지를 판단해준다.
if (Array.isArray(arr)) {
return arr.filter(function(element) {
return typeof element === 'number' && lessThan100(element);
})
} else {
return [];
}
3. 필터링해준 배열 arr를 최종 리턴해준다.
return arr;
}
객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 배열의 각 요소를 제곱한 새로운 배열을 리턴해야 한다.
number 타입의 정수만을 요소로 갖는다고 가정square)를 사용function square(number) {
return number * number;
}
function getSquaredElementsAtProperty(obj, property) {
1. 새로운 배열 arr를 선언 후 객체의 키에 해당하는 값을 할당해준다.
let arr = obj[property];
2. 키에 해당하는 값이 배열일 경우 보조함수 square을 사용하여 요소를 제곱한 값을 리턴해준다.
3. 키에 해당하는 값이 배열이 아닌 경우에는 빈 배열을 리턴해준다.
if (Array.isArray(arr) === true) {
return arr.map(square);
} else {
return [];
}
}
문자열을 요소로 갖는 배열을 입력받아 배열에서 가장 긴 문자열의 길이를 리턴해야 한다.
number 타입을 리턴function getLengthOfLongestElement(arr) {
1. 먼저 빈 배열을 입력받은 경우에는 0을 리턴해준다.
if (arr.length === 0) {
return 0;
}
2.
return arr.reduce(function(a, b) {
if (a.length >= b.length) {
return a;
} else {
return b;
}
}).length;
}
배열을 입력받아 배열에서 가장 짧은 길이를 가진 문자열 요소를 리턴해야 한다.
function findShortestWord(arr) {
1. 빈 배열을 입력받은 경우 빈 문자열을 리턴해준다.
if (arr.length === 0) {
return '';
}
2. 새로운 배열을 선언해주고, 원래 배열에서 문자열로만 구성되게 필터링해준다.
이때 typeof를 사용하여 요소가 문자열인지 걸러주는 것이다.
let newArr = arr.filter(function(element) {
return typeof element === 'string';
});
3. 만약 배열 newArr에 문자열이 없는 경우 빈 문자열을 리턴해준다.
if (newArr.length === 0) {
return '';
}
4. reduce 메서드를 사용하여 각 요소(문자열)의 길이를 비교해준다.
조건문을 사용하여 가장 짧은 길이를 가진 문자열을 리턴해준다.
return newArr.reduce(function(a, b) {
if (a.length <= b.length) {
return a;
} else {
return b;
}
})
}
학생의 정보가 담긴 객체를 요소로 갖는 배열을 입력받아 아래 조건에 맞게 변형된 배열을 리턴해야 한다.
'grades' 속성값은 평균값(number 타입)으로 변경number 타입의 평균값으로 변형function studentReports(students) {
1. 변수 newStudents를 선언해주고, filter 메서드를 사용하여
객체 속 gender의 value값이 'female'인 경우를 걸러준 후, 해당 객체를 할당해준다.
let newStudents = students.filter(function(element) {
return element.gender === 'female';
})
2. grades의 속성값을 평균값으로 내줄 새로운 배열을 만들기 위해 map 메서드를 사용한다.
3. sum이라는 변수를 선언하고 grades 속성값을 합친 값(acc)을 할당해준다.
return newStudents.map(function(element) {
let sum = element.grades.reduce(function(acc, curr) {
acc = acc + curr;
return acc;
})
4. grades 속성값을 더한 sum을 grades 수만큼 나눠준 뒤에 grades의 속성값에 재할당해준다.
5. 위 조건들에 맞추어 변경된 배열을 최종 리턴해준다.
element.grades = sum / element.grades.length;
return element;
})
}
2차원 배열(배열을 요소로 갖는 배열)을 입력받아 모든 수(number)의 합을 리턴해야 한다.
number 타입을 리턴1. arr = [[1, 2], [undefined, 4, '5'], [9, 'hello'],] 라고 예를 들어보려고 한다.
function sumOfArraysInArray(arr) {
2. 먼저 reduce와 concat 메서드를 통해 2차원 배열을 1차원 배열로 만들어준다.
let newArr = arr.reduce(function(acc, curr) {
return acc.concat(curr);
});
// newArr = [1, 2, undefined, 4, '5', 9, 'hello']
3. 새 배열(filtering)을 선언해주고, filter 메서드를 이용하여
1차원 배열(newArr)에서 number 타입 요소만 걸러준 값을 할당해준다.
let filtering = newArr.filter(function(element) {
return typeof element === 'number';
});
// filtering = [1, 2, 4, 9]
4. 다시 reduce 메서드를 이용하여 필터링된 요소들끼리 더해준 뒤 그 축적값을 리턴해준다.
return filtering.reduce(function(acc, curr) {
acc = acc + curr;
return acc;
}, 0);
}