JS.코어 (reduce)

Vorhandenheit ·2021년 6월 17일
0

JS.코어

목록 보기
8/29
post-custom-banner

Reduce

arr.reduce((accumulator, currentValue[, index, array])(, initialValue)

  • accumulator : 누산자라고 불리는 것, callback값을 의미하는데, function에서 값을 처리리하고 리턴 값이 여기 들어온다,
  • currentValue : 현재 처리해야하는 값
  • index : 현재 처리해야하는 값의 인덱스
  • array : 원본 배열 전체를 의미
  • initialValue : 초기값

보통 일반적으로 reduce ((acc ,cur) => (acc + cur)) 이렇게 사용되는데, 식이 복잡해서 당황했지만, 쉽게 생각하면 for문을 간단하게 간략화한 것이다.

for (let i = 0; i < arr.length; i++) {
	result += arr[i]
}

기존에 하나하나의 값을 넣고 넘어가고 더하고 이걸 반복했다면, 이걸 고급함수를 통해서 간략화 시킬 수 있었다.
accumulator에는 i가 i+1로 넘어갈때 처럼 값이 들어오고 , index는 i와 같이 순서를 우리이게 말해주고 있다. 일단 이렇게 이해하고 이 reduce함수가 어떻게 다양하게 다뤄지는지 보는게 더 중요하다.

1)배열을 딕셔너리로 변환

// 배열을 딕셔너리로 변환한다 
let rr = ["lion", "tiger"].reduce(
  ( result, curr ) => {
	result[curr] = curr;
	return result;
  }, 
  {}
);
console.log(rr) // 결과값: {lion: "lion", tiger: "tiger"}
let countedNames = ['A', 'B', 'A', 'A', 'B'].reduce(function (result, cur) { 
  if (cur in result) {
    result[cur]++
  } else {
    result[cur] = 1
  }
  return result
}, {})
console.log(countedNames) // {A: 3, B: 2}

이런식으로 return값 전에 조건문을 달수도 있다.

2)딕셔너리(키:값)에서 값이 비어있는 경우 필터링하기

const params = {"hobby":"", "address":"seoul"}
const filteredParams = Object.keys(params).reduce(function (filtered, key) {
      if (params[key] !== "") filtered[key] = params[key];
      return filtered;
    }, {});
console.log('params:', params) // params: {hobby: "", address: "seoul"}
console.log('filteredParams:', filteredParams) // filteredParams: {address: "seoul"}
profile
읽고 기록하고 고민하고 사용하고 개발하자!
post-custom-banner

0개의 댓글