내가 모르는 js기초 문법들(=>,reduce,foreach...)
7개월 전
이번에 강의를 들으면서 뭔가 당연히 알아야한다는 느낌으로 설명이 나오는데 완전히 처음보는 문법들이 있었다.
일단은 그러려니 했었는데 js코테 문제를 풀어보고 다른 사람들 풀이를 보는데 그곳에서도 비슷한 문법들이 나오길래 이번 기회에 그냥 그 문법들을 정리해보기로 하였다.
js 화살표 문법 (=>)
일반적으로 함수를 만드는 방식을 간편하게 바꾼 것이 화살표 문법(arrow function)이다.
사용 방식은 let func = (arg1, arg2, ...argN) => expression
방식이다.
let (함수명) = (매개변수's) => (함수 내용)의 방식이다.
이렇게 설명만 한다면 감이 잘 오지 않을 수 있으니 간결한 사용 예시를 들어본다면
let sum = (a, b) => a + b;
이다. 만약 받는 인수가 없는 경우에는
let sayHi = () => alert("안녕하세요!");
방식으로 작성한 후
sayHi();
를 입력하면 된다.
약간 더 활용을 추가하면 삼항연산자를 추가하여서
let welcome = (age < 18) ? () => alert('안녕') : () => alert("안녕하세요!");
방식으로 작성 할 수 있다.
그리고 내용을 여러줄로 적어야 할 경우에는
let sum = (a, b) => {
let result = a + b;
return result;
};
방식으로 적어야 한다.
※주의점※
화살표 함수에서는 this 사용 시 주의해야 한다.
var name = "Global";
let user = {
name: "Inpa",
sayHi: function() {
console.log(this.name);
}
};
user.sayHi(); // Inpa
위 경우는 일반 함수라서 this.name이 Inpa로 나오지만
var name = "Global";
let user = {
name: "Inpa",
sayHi: () => {
console.log(this.name);
}
};
user.sayHi(); // Global
위 경우는 화살표 함수라서 this.name이 Global로 나온다.
js reduce
reduce의 일반적인 사용 방법은
const arr = [1, 2, 3, 4, 5]
arr.reduce(function (acc, cur, idx) {
console.log(acc, cur, idx);
return acc + cur;
}, 0);
이다.
acc는 accumulator의 약자로 현재까지의 cur(=currentValue)의 누적 값들을 의미한다.
cur은 currentValue의 약자로서 arr[index]의 값을 의미한다.
idx는 index의 약자로 현재 값이 arr을 기준으로 몇번째(0~)인지를 의미한다.
이게 일반적인 사용법중 하나인 배열 요소의 합산 예시이다.
다른 활용방법으로는 map구현이 있다.
const arr = [1, 2, 3, 4, 5]
const result = arr.reduce(function (acc, cur) {
acc.push(cur % 2 ? "홀수" : "짝수");
return acc;
}, []);
console.log(result);
// [ '홀수', '짝수', '홀수', '짝수', '홀수' ]
위 방법은 arr의 값들은 순차적으로 집어넣은 후 홀수면 홀수,짝수면 짝수가 되도록 새로운 배열을 만든 것이다.
마지막에 있는 []의 정체는 initialValue로 그냥 초기값이다.
※알면 좋은 것들※
1. 사실 단순 함수를 만들것이면 화살표가 더 "간결"하다.(무조건적으로 좋지는 않다.)
2. 배열을 끝값부터 하고싶으면 reduceRight가 있다.
js foreach
foreach는 개념자체는 상당히 간단하다.
var arr = ['가','나','다','라'];
arr.forEach(function(item,index,arr2){
console.log(item,index,arr2[index+1]);
})
보다시피 arr의 값들을 안에 있는 함수에 순차적으로 집어넣는 구조이다.
앞의 코드를 실행시키면
가 0 나
나 1 다
다 2 라
라 3 undefined
가 출력된다.
순서대로 (현재 들어간 값, 현재 들어간 값의 index값,현재 index+1의 값)
번외-for in과 for of
for in은 객체({key:value}의 형태)에 사용 할 수 있다.
var obj = {
a: '가',
b: '나',
c: '다'
};
for (var key in obj) {
console.log(key, obj[key]); // a 가, b 나, c 다
}
key에다가 obj의 key값을 넣는 방식으로 작동된다.
for of는 for in과는 유사하면서도 다른데 for of는 key가 아닌 값만을 순차적으로 집어넣는다.
var iterable = [10, 20, 30];
for (var value of iterable) {
console.log(value); // 10, 20, 30
}
보다시피 value에 iterable의 값들이 순차적으로 들어가고 출력된것을 확인할 수 있다.
py의 for문같은 느낌인 것 같다.
댓글을 작성해보세요.