function findShort(s){
const wordList = s.split(' ');
let answer= wordList[0].length;
for(let i=0;i<wordList.length;i++){
const wordLen = wordList[i].length;
if (answer > wordLen){
answer = wordLen;
}
}
return answer
}
가장 먼저 든 생각은, split
메서드를 통해 각 단어의 배열을 만들고 각 단어들의 길이를 가지는 배열로 바꾸려고 했었다. 근데 굳이 복잡할 것 같아서 각 인자의 길이를 모두 비교하는 코드를 짰다.
function findShort(s){
return Math.min.apply(null, s.split(' ').map(word=> word.length);
파이썬과 달리, 자바스크립트에서는 Math.min()
메서드에 배열을 인자로 집어넣을 수 없다. 공식 문서에 의하면 Math.min()
의 인자는 숫자형이여야한다. 따라서, 가령 Math.min(1,2,3)
형태로 넘겨줘야만 한다. 이 과정에 apply()
메서드를 사용한다.
apply()
메서드는 첫번째 인자로 함수 내부에서 사용될 this
로 바인딩될 객체를 전달하고, 두번째 인자로 호출한 함수에 쓰일 인자들로 단일 배열을 넘긴다. 따라서, 위의식에선 Math.min(1,2,3)
의 형태로 함수가 실행된다.
function descendingOrder(n){
const answerNum = n.toString().split('').sort(function (a,b){return b-a}).join('');
return parseInt(answerNum)
}
내 코드와 일치했다.
Array.prototype.sort()
메서드는 인자로 compareFunction을 받는다. 말 그대로, 정렬기준을 정해주는 함수를 인자로 받는다. 숫자비교시 내림차순 오름차순을 하기위해 다음과 같은 compareFunction을 사용한다.
function compareNumbers(a, b) {
return b - a;
}
그 이유는 MDN 문서에 따르면 다음과 같다.
출처 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
default로는 유니코드 포인트를 기반으로 정렬된다고 한다.
function openOrSenior(data){
const answer=[];
for (let list of data) {
answer.push((list[0]>=55 && list[1]>7 && "Senior") || "Open")
}
return answer;
}
논리연산자를 통해 한번에 해결하고 싶었다.
function openOrSenior(data){
return data.map(([age, handicap]) => (age > 54 && handicap > 7) ? 'Senior' : 'Open');
}
논리 연산의 결과에 따라 boolean
값을 반환할지, 문자열을 반환할지에따라 순서가 중요하다. 나의 풀이에서는 Senior 조건(boolean
)이 참이될때 문자열 Senior
을, 거짓이 될때 false
를 반환하기위해서 (list[0]>=55 && list[1]>7 && "Senior"
라고코드를 짰다.
생각해보니, 삼항연산자
를 사용하면 간단했다.
map()
메서드를 통해, [age,handicap]
을 인자로받고, 조건문이 참일때 Senior
, 거짓일때 Open
을 반환하는 함수를 사용하면 된다.
condition ? exprIfTrue : exprIfFalse
condition
이 참일경우, exprIfTrue
를 반환condition
이 거짓일 경우, exprIfFalse
를 반환한다.