logo

Map을 이용하여 객체 정렬하기

배열의 정렬은 sort 메소드를 사용하여 오름,내림차순 정렬이 가능하다.

하지만 객체의 value의 값에 맞춰서 정렬은 어떻게 해야할까?

  1. 객체를 배열로 변환하여 정렬한다.

  2. 정렬된 배열을 다시 객체로 변환한다

  3. 순서를 유지하고 싶으면 Map을 사용하여 변환한다.

const fruitCounts = { apple: 10, banana: 2, orange: 7, mango: 5 };

const sortedByValue = Object.entries(fruitCounts)
    .sort(([, a], [, b]) => a - b);

console.log(sortedByValue); 
// 출력: [ [ 'banana', 2 ], [ 'mango', 5 ], [ 'orange', 7 ], [ 'apple', 10 ] ]

// Map으로 변환하여 순서 보장
const sortedMap = new Map(sortedByValue);

console.log(sortedMap);
// 출력: Map {'banana' => 2, 'mango' => 5, 'orange' => 7, 'apple' => 10}

console.log(Array.from(sortedMap))
// 다시 sortedByValue로 만드는 방법

for(const [key,value] of sortedMap){
        console.log(`${key}: ${value}`)
    }
// for... of 로 순회하여 키와 값을 처리.
읽는 시간 1분

N개의 숫자의 배열 만들기

코딩테스트 중에 숫자 N이 주어졌을 때 N개의 배열을 만들어서 forEach를 하고 싶었다.

그냥 for문이나 while문으로 하면 되겠지만, 배열의 메소드가 익숙해버려서, 해당 방법을 찾기 시작했다.

1중배열 (n개의 배열)

  1. for
function createArray(n) {
  const result = []
  for (let i = 1; i <= n; i++) {
    result.push(i)
  }
  return result
}
  1. while
function createArray(n) {
  const result = []
  let i = 1

  while (i <= n) {
    result.push(i)
    i++
  }

  return result
}
  1. Array.from
//* Recommend
const array = Array.from({ length: n }, (_, i) => i + 1)
  1. Array.map
const array = Array(n)
  .fill()
  .map((_, i) => i + 1)

2중배열로 만들기, ex)[[1], [1,2], [1,2,3], [1,2,3,4], [1,2,3,4,5]]

  1. for
function createArrays(n) {
  const result = []
  for (let i = 1; i <= n; i++) {
    const arr = []
    for (let j = 1; j <= i; j++) {
      arr.push(j)
    }
    result.push(arr)
  }
  return result
}
  1. while
function createArrays(n) {
  const result = []
  let i = 1

  while (i <= n) {
    const arr = []
    let j = 1

    while (j <= i) {
      arr.push(j)
      j++
    }

    result.push(arr)
    i++
  }

  return result
}
  1. Array.from
//* Recommend
function createArrays(n) {
  return Array.from({ length: n }, (_, i) =>
    Array.from({ length: i + 1 }, (_, j) => j + 1)
  )
}
  1. Array.map
function createArrays(n) {
  return Array(n)
    .fill()
    .map((_, i) =>
      Array(i + 1)
        .fill()
        .map((_, j) => j + 1)
    )
}

n x n 2차원 배열 만들기

읽는 시간 2분