728x90
reduce
javascript에서 가장 강력크한 기능?이다?
reduce 함수는 네 개의 인자를 가진다.
1. 누산기(acc)
2. 현재 값(cur)
3. 현재 인덱스(idx)
4. 원본 배열(src)
리듀서 함수의 반환 값은 누산기에 할당되고, 누산기는 순회 중 유지되므로, 결국 최종 결과는 하나의 값이 된다.
배열에 각 요소에 대해 함수를 실행하고 누적된 값을 출력할 때 용이하다.
const arr = [1,2,3,4,5];
const result = arr.reduce((acc, cur, idx) => {return acc +=cur}, 0);
console.log(result); // 15
const arr2 = [1,2,3,4,5]
const result2 = arr2.reduce((acc, cur, idx) => {return acc += cur}, 10)
console.log(result2); // 25
초기값: 0, acc는 0으로 시작, 배열의 첫번째 요소부터 acc에 자신의 값인 cur을 더해간다.
acc가 계속 누적이 되는 값이다.
cur는 루프의 차례값이다. 현재값으로 보면 된다.
1+2+3+4+5=15
초기값: 10, acc는 10으로 시작, ... 10+1+2+3+4+5=25
두번째 예시
const numbers = [-2, -5, 4, 6];
const result = numbers.reduce((acc, cur, idx) => {
if(cur < 0) {
acc[0] = acc[0] + cur;
}
else if(cur > 0) {
acc[1] = acc[1] + cur;
}
return acc;
},[0,0]);
console.log(result); // [-7, 10]
reduce를 map처럼 사용하기
const arr = [1, 2, 3, 4, 5];
// 1씩 더한 값을 반환
const mapList = arr.map((item) => item + 1);
console.log(mapList); // 2,3,4,5,6
const reduceList = arr.reduce((acc, cur) => {
acc.push(cur + 1);
return acc; // 리턴을 해줘야 먹힌다.
}, []);
console.log(reduceList); // 2,3,4,5,6
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
Set
객체는 자료형에 관계없이 '원시값'과 '객체 참조' 모두 유일한 값을 저장할 수 있다.
//이게 된다고? ㅋㅋㅋ -> 안 됨
const dupArr = [{a:1}, {a:1}];
const setArr = new Set(dupArr)
console.log(setArr) // [{a:1}, {a:1}]
setArr.has({a:1}) // false
안 됨
.
.
.
원시타입과 Nan 그리고 undefined 정도는 걸러지는 것 같다.
인스턴스 속성
Set.prototype.size // 숫자를 반환한다.
Set.prototype.add(Value) // set에 추가한다.
Set.prototype.clear() // 전부 삭제
Set.prototype.delete(Value) // 특정 원소 삭제
Set.prototype.has(Value) // 여부
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Set
Array.from()
curry
함수형 프로그래밍
728x90
'자바스크립트' 카테고리의 다른 글
[Javascript] mutable과 immutable 데이터 관리하기 (0) | 2022.09.26 |
---|---|
[Javascript] 파일 용량 포멧 코드 (2) | 2022.09.25 |
[jest] svg를 import한 vue 컴포넌트 테스트 실행 오류 해결방법 (0) | 2022.09.19 |
API 응답 AXIOS 에러를 컴포넌트로 전달하기 (0) | 2022.08.29 |
[Vue]vue2 + eslint 세팅 (0) | 2022.08.29 |
댓글