함수 선언과 함수 표현식 외에도, JavaScript에는 함수를 정의하는 아주 간결한 문법이 하나 더 있어요. 이런 함수를 _화살표 함수_라고 해요.
다음은 함수 선언과 화살표 함수를 비교한 예시예요.
function addUpTwoNumbers(num1, num2) {
return num1 + num2;
}
// function keyword removed and => added
const addUpTwoNumbers = (num1, num2) => {
return num1 + num2;
};
위 예시처럼 함수 본문에 return문만 있다면, {}와 return 키워드는 생략할 수 있어요.
매개변수가 하나뿐이라면 괄호 ()도 생략할 수 있어요.
const addUpTwoNumbers = (num1, num2) => num1 + num2;
const square = num => num * num;
화살표 함수는 함수를 호출할 때 짧은 콜백 함수를 바로 정의하는 데 자주 쓰여요.
applyToSquare(number => number * number);
배열에는 배열의 내용을 분석하는 내장 메서드가 있어요.
이런 메서드 대부분은 true나 false를 반환하는 함수를 인자로 받아요.
이런 함수를 predicate라고 해요.
내장 메서드는 for문이나 내장 forEach 메서드 대신 사용하도록 만들어졌어요.
for문으로 분석한 예시:
const numbers = [1, 'two', 3, 'four'];
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] === 'two') {
return i;
}
}
// => 1
내장 메서드로 분석한 예시:
const numbers = [1, 'two', 3, 'four'];
numbers.indexOf('two');
// => 1
아래에는 배열을 분석할 때 쓸 수 있는 다른 유용한 내장 메서드 몇 가지를 소개해요. 배열 메서드의 전체 목록은 MDN을 참고해요.
includesincludes(value) 메서드는 배열에 특정 값이 포함되어 있는지 확인해요.
값이 포함되어 있으면 true를, 그렇지 않으면 false를 반환해요.
const numbers = [1, 'two', 3, 'four'];
numbers.includes(1);
// => true
numbers.includes('one');
// => false
everyevery(predicate) 메서드는 predicate 역할을 하는 함수를 받아요.
배열의 모든 원소를 predicate에 넘겼을 때 true를 반환하는지 검사해요.
다시 말해, 모든 원소가 함수 호출에 전달된 테스트를 통과하는지 검사하는 메서드예요.
모든 원소가 predicate 테스트를 통과하면 true를, 그렇지 않으면 false를 반환해요.
const numbers = [1, 3, 5, 7, 9];
numbers.every((num) => num % 2 !== 0);
// => true
somesome(predicate) 메서드는 every 메서드와 같지만, 배열에서 항목이 최소한 하나라도 predicate 테스트를 통과하면 true를 반환해요.
const numbers = [1, 3, 5, 7, 9];
numbers.some((num) => num % 2 !== 0);
// => true
findfind(predicate) 메서드는 배열에서 predicate 테스트를 통과하는 첫 번째 원소의 값을 반환해요.
some()이 통과할 때 true를 반환한다면, find()는 배열에 있는 실제 값을 반환해요.
배열의 어떤 원소도 predicate 테스트를 통과하지 못하면 undefined를 반환해요.
const numbers = [1, 3, 5, 7, 9];
numbers.find((num) => num < 5);
// => 1
findIndexfindIndex(predicate)는 find() 메서드와 같지만, predicate 테스트를 통과한 원소의 value 대신 (첫 번째) _index_를 반환해요.
어떤 원소도 predicate 테스트를 통과하지 못하면 -1을 반환해요.
const numbers = [1, 3, 5, 7, 9];
numbers.findIndex((num) => num > 7);
// => 4
numbers.findIndex((num) => num > 9);
// => -1
마법사 지망생 Elyse는 훈련을 계속해요. Elyse는 마술을 부리기 위해 여러 개의 카드 더미를 받아요. 조금 더 쉽게 하기 위해 Elyse는 1부터 10까지의 카드만 사용해요.
이 연습 문제에서는 내장 메서드를 사용해 배열의 내용을 분석해요.
Elyse는 카드 더미에서 카드의 위치(인덱스)를 알고 싶어요.
const card = 2;
getCardPosition([9, 7, 3, 2], card);
// => 3
Elyse는 카드가 더미 안에 있는지, 다시 말해 더미에 특정 number가 들어 있는지 알고 싶어요.
const card = 3;
doesStackIncludeCard([2, 3, 4, 5], card);
// => true
Elyse는 모든 카드가 짝수인지, 다시 말해 더미의 각 숫자가 짝수 number인지 알고 싶어요.
isEachCardEven([2, 4, 6, 7]);
// => false
Elyse는 더미에 홀수가 있는지 알고 싶어요.
doesStackIncludeOddCard([3, 2, 6, 4, 8]);
// => true
Elyse는 처음으로 나오는 홀수 카드의 값을 알고 싶어요.
getFirstOddCard([4, 2, 8, 7, 9]);
// => 7
Elyse는 처음으로 나오는 짝수 카드의 위치를 알고 싶어요.
getFirstEvenCardPosition([5, 2, 3, 1]);
// => 1
Exercism에 가입하고 JavaScript 트랙을 개념 37개연습 문제 159개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.