최빈값 구하기 (reduce, map, filter)

정창민·2023년 1월 13일
0

1. 문제




2. reduce 특징

const arr = [1, 2, 3, 4, 5]

const newArr = arr.reduce( (accumulator, currentValue, index, array) => {
  return accumulator + currentValue
})

console.log(newArr)	// 출력 15
  • accumulator (누산기) 에 초기값을 설정 안 해주면 배열 첫번째 요소가 초기값으로 설정됨, 현재 배열 1

  • currentValue 현재 배열 2

  • index는 배열의 위치
    ex) arr[0] === 1, index는 0

  • array는 배열 전체 [1, 2, 3, 4, 5]



const arr = [1, 2, 3, 4, 5]

// 1.
arr.reduce( (accumulator, currentValue, index, array) => {
  return accumulator + currentValue
}, {})	// 초기값 설정 위치

// 2.
arr.reduce( (acc, cv) => acc + cv, 3)
  1. 초기값을 빈 객체 { } 로 지정해주면, accumulator(누산기) 초기값은 { }

  2. 초기값을 3으로 지정하면 accumlator의 초기값은 3으로 시작




3. 나의 풀이

const solution = (array) => {
  // 1. reduce
    const newObject = array.reduce((acc, cv) => {
        if(acc[cv]) {
            acc[cv] = acc[cv] + 1
        } else if(!acc[cv]) {
            acc[cv] = 1
        }
        return acc
    }, {})
    
    const maxValue = Math.max(...Object.values(newObject))
    const newEntries = Object.entries(newObject)
    
    // 2. map
    const newArray = newEntries.map(([key, value]) => {
        if(value === maxValue) {
            return key
        }
    })
    
    // 3. filter
    const clearArray = newArray.filter(Boolean)
    
    return clearArray.length > 1 ? -1 : Number(clearArray[0])
}

첫 번째 입력 [1, 2, 3, 3, 3, 4]

reduce

  1. currentValue가 없을 시 1을 대입, 출력 '1' : 1

  2. currentValue가 없을 시 1을 대입, 출력 '2' : 1

  3. currentValue가 없을 시 1을 대입, 출력 '3' : 1

  4. currentValue가 있을 시 + 1 카운팅, 출력 '3' : 2

  5. currentValue가 있을 시 + 1 카운팅, 출력 '3' : 3

  6. currentValue가 없을 시 1을 대입, 출력 '4' : 1

출력 : { '1' : 1, '2' : 1, '3' : 3, '4' : 1 }




  • Math.max() 함수 안에는 순수한 값만 들어가야 함
    ex) Math.max(1, 2, 3)

  • ...연산자를 사용해 객체에 속한 값만 추출
    maxValue = 3

  • Object.entries 메소드를 통해 [key, value] 쌍을 담은 배열을 반환
    newEntries = [['1' : 1], ['2' : 1], ['3' : 3], ['4' : 1]]



map

  • map 메소드를 통해 key, value 쌍을 담은 배열을 묶어서 가공

  • maxValue와 value가 같은 key를 리턴

  • [undefined, undefined, 3, undefined] 으로 출력 됨



filter

  • undefined 등의 Boolean 타입을 필터링

  • '3' (문자열) 을 반환

  • clearArray.length가 1보다 작으므로 Number(clearArray[0])
    3 (숫자) 출력

profile
안녕하세요~!

0개의 댓글