vue 에서 table 을 sorting 하는 방법은 두 가지가 있을 것이다.
라이브러리를 사용하거나 (lodash)
공식페이지의 가이드를 따라하거나.
해당 글에서는 라이브러리를 사용하지 않고 기능을 구현하는 예제를 다룬다.
compareValues: function (key, order='desc') {
return function innerSort(a, b) {
if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
// property doesn't exist on either object
return 0;
}
const varA = (typeof a[key] === 'string')
? a[key].toUpperCase() : a[key];
const varB = (typeof b[key] === 'string')
? b[key].toUpperCase() : b[key];
let comparison = 0;
if (varA > varB) {
comparison = 1;
} else if (varA < varB) {
comparison = -1;
}
return (
(order === 'desc') ? (comparison * -1) : comparison
);
};
},
코드를 살펴보자.
1. key 와 정렬 방식을 입력받고 해당 key 가 있는지 체크.
2. 해당 key 의 값이 string type 인지 확인
- string type 이라면 toUpperCase() 함수를 이용하여 string 의 대소문자를 맞춰준다.
- string type 이 아니라면 그냥 비교하면 된다. (ex. 숫자, 날짜)
3. 값을 비교하고 정렬 방식에 맞는 값을 리턴해준다.
해당 함수를 이용해서 정렬을 하면 되겠다.
sortBy: function(column) {
if (column.sort) {
this.sortKey = column.key;
this.sortOrders[this.sortKey] = this.sortOrders[this.sortKey] * -1;
var result_set = this.result_set;
this.result_set = result_set.sort(this.compareValues(this.sortKey, this.sortOrders[this.sortKey]))
}
},
desc 나 asc 대신 1이나 -1 을 직접 넣어줬다.
그리고 array.sort(compareValues()) 를 이용해 소팅한다.
선택된 column 의 key 를 기준으로 정렬하는 예제이다.
반응형
'Javascript > Vue.js' 카테고리의 다른 글
vue 2.x버전 flatpickr 문제 Missing required prop: "value" found in FlatPickr (0) | 2020.12.08 |
---|---|
vue router URL 에서 "#" 제거하기 (hashbang) (0) | 2020.12.07 |
Vue.js 에서 browser 구분하기. (how to detect browser vuejs) (0) | 2020.11.30 |
Vue.js IE11 호환문제 (SCRIPT1003 ':' 가 필요합니다. Expected ':') (0) | 2020.07.23 |
Vue.js 시작하기 (Visual Studio Code Vue.js Example) (0) | 2020.02.10 |
최근댓글