본문 바로가기
📑Javascript

[Javascript]Array Multi Column Sorting, 여러 조건으로 배열 정렬

by 빈성_ 2022. 4. 7.
반응형

Intro

오랜만에 작성하는 글은 Javascript의 Array Multi Column Sorting. 뭔가 있어 보이지만 여러 개의 조건으로 배열을 정렬하는 건 기본 메서드인 sort로 이미 가능합니다. 하지만 그 모습은! 조금 못 생겼으므로 나름대로 다듬어 봤습니다.

Result

const multiSorting = (data, columns) => {

  const comparer = (a, b) => {
    return compareMultiple(a, b, Object.entries(columns))
  }

  const compareMultiple = (a, b, columnsEntries) => {
    let index = -1
    const length = columnsEntries.length
    while (++index < length) {
      const [column, order] = columnsEntries[index]
      let result = compareAscending(a[column], b[column])
      if (result) {
        return result * (order === 'desc' ? -1 : 1)
      }
    }
  }

  const compareAscending = (prev, next) => {
    if (prev > next) return 1
    if (prev < next) return -1
    return 0
  }

  data.sort(comparer)
}

multiSorting(list, { postId: 'desc', name: 'asc' })

multiSorting의 첫 번째 인자로 정렬하고 싶은 Array가 들어갑니다.

두 번째 인자에는 정렬 대상이 될 column이 키가 되고 내림차순이냐 오름차순이냐를 값으로 가지는 Object가 들어갑니다.

 

전체 소스 코드는 이곳에서 확인 가능하십니다.

주저리주저리

구현하면서 Lodash의 orderBy를 참고했습니다. 역시 없는거 빼곤 다 있는 Lodash입니다.

반응형

댓글