반응형
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입니다.
반응형
댓글