Coplit Basic이 이렇게 어려웠었나....?😅
IAT 예상기출위주로 다시 풀어보는데...의외로 오래 걸렸다.
자신감이 점점 떨어져 가운데...복습복습복습한다...!
주어진 배열을 제일 아래 콘솔과 같이 객체에 담아 리턴한다.
빈 배열과 빈 객체를 생성하여 순회하면서 추가한다.
forEach를 중첩해서 쓰는 건 보기좋지 않아서 for-of로 순회하였다.
키워드 🗝: forEach
, for...of
function transformEmployeeData(array) {
let res = [];
let obj = {};
array.forEach(item => {
for(const a of item) {
obj[a[0]] = a[1];
}
res.push(obj);
obj = {};
})
return res;
}
let arr = [
[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
];
console.log(transformEmployeeData(arr));
// [
// { firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk' },
// { firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager' }
// ];
배열 리턴은 대부분 map으로 깔끔하게 해결할 수 있다.
Object.keys로 key값만 배열로 받아서, map을 사용할 수 있게 한다.
이후 map으로 [key, value]쌍으로 리턴해준다.
map이 원래 배열로 리턴하므로 [ [], [], [] ]
와 같이 리턴된다.
키워드 🗝: Object.keys
, map
function convertObjectToArray(obj) {
return Object.keys(obj).map(k => [k, obj[k]])
}
var obj = {
name: 'Holly',
age: 35,
role: 'producer'
};
console.log(convertObjectToArray(obj));
// [['name', 'Holly'], ['age', 35], ['role', 'producer']];
이걸 깔끔하게 구현하는 걸 자주 고민하는데 쉽지가 않다...
그나마 괜찮은 방법은 ['A','B','C'...'F']
배열을 생성해서 가져오는 것이다.
그거나 이거나 별 차이가 없다. 구현은 간단해서 설명은 생략한다.
function convertScoreToGradeWithPlusAndMinus(score) {
if (score > 100 || score < 0) return `INVALID SCORE`;
if (score === 100) return 'A+';
if (score <= 60) return 'F';
let grade;
let dec = score % 10;
score >= 90 ? grade = 'A' :
score >= 80 ? grade = 'B' :
score >= 70 ? grade = 'C' : grade = 'D';
if (dec >= 0 && dec <= 2) {
grade += '-';
} else if (dec >= 8 && dec <= 9) {
grade += '+';
}
return grade;
}
console.log(convertScoreToGradeWithPlusAndMinus(99)); // A+
console.log(convertScoreToGradeWithPlusAndMinus(81)); // B-
console.log(convertScoreToGradeWithPlusAndMinus(66)); // D
console.log(convertScoreToGradeWithPlusAndMinus(59)); // F
배열에서 가장 짧은 문자열을 리턴한다.
string
만 필터링하여, 길이오름차순으로 정렬 후 0번째 인덱스를 리턴한다.
키워드 🗝: filter
sort
function findShortestWordAmongMixedElements(arr) {
return arr.filter(val => typeof val === 'string').sort((a, b) => a.length - b.length)[0]
}
var output = findShortestWordAmongMixedElements([4, 'two', 2, 'three']);
console.log(output); // --> 'two'
코플릿에 없어서 구글링으로 문제를 가져왔다. (오프라인 수강 전용인가보다.)
space기준으로 분리해서 첫번째값만 대문자로 만들고 다시 붙인다.
키워드 🗝: split
, map
, join
function letterCapitalize(str) {
return str.split(' ').map(word => word.slice(0, 1).toUpperCase() + word.slice(1)).join(' ')
}
console.log(letterCapitalize("hello world from codestates"))
console.log(letterCapitalize("hello"))
양수이면 각 숫자를 더하고, 음수면 첫번째 숫자는 음수, 나머진 양수로 더한다.
문자열 그대로 해도 되지만, 배열로 만들면 고차함수를 활용할 수 있다.
키워드 🗝: split
, reduce
, +
function sumDigits(num) {
let numArr = num.toString().split('');
if(num >= 0) {
return numArr.reduce((acc, cur) => acc + +cur, 0);
} else {
return numArr.slice(2).reduce((acc, cur) => acc + +cur, -numArr[1])
}
}
var output = sumDigits(1148);
console.log(output); // --> 14
var output = sumDigits(-316);
console.log(output); // --> 4
아..이 문제 너무 고생했다.
이전에 풀었던 방식이 너무 복잡해서 recursion으로 바꾸었다.
기준은 modulo(num1 - num2, num2)
이다.
두 수의 차를 num1
에 계속 주고, num2보다 작아지면 num1을 리턴한다.
나머지는 주어진 조건에 따라 예외처리를 한다.
if
만 계속 적는 거보다 아래처럼 정리하는게 보기 좋았다.
키워드 🗝: recursion
function modulo(num1, num2) {
if(num2 === 0 || isNaN(num1) || isNaN(num2)) return NaN;
return (
num1 < 0 ? -modulo(-num1, num2) :
num2 < 0 ? modulo(num1, -num2) :
num1 < num2 ? num1 : modulo(num1 - num2, num2)
);
}
console.log(modulo(25, NaN)); // NaN
console.log(modulo(25, 4)); // 1
console.log(modulo(-4, 2)); // 0
다 정리하고 커밋하는 습관을 가집시다!!! 🙇🏻♂️🙇🏻♂️🙇🏻♂️