응용 프로그램 시나리오 :
여러 정렬 방법을 지원합니다 :
https : // your-url? sort [first_name] = desc & sort [last_name] = asc
https : // your-url? sort [first_name] = 오름차순 및 정렬 [last_name] = 하강
이 함수는
sortby 필드를 사용하여 정렬을 지원합니다 : https : // your-url? sortorder = desc & sortby = last_name
]]
TypeScript 코드 :
"ASC"| 인터페이스 IpaginationFields 내보내기 { 페이지? : 숫자; 한계 : 숫자; Sortby? : String |; Sortorder? : Isortorder |. 정렬? : 레코드 ; } 인터페이스 iformatedPagination 내보내기 { 건너 뛰기 : 번호; 페이지 : 번호; 한계 : 숫자; 정렬 : {[키 : 문자열] : 1 |. } 내보내기 const formatpagination = (Pagination : iPaginationfields) : iforMatedPagination => { const {limit = 10, page = 1, sortby, sortorder, sort} = Pagination; const formattedSort : {[key : string] : 1 | -1}; const normalizeorder = (순서 : 문자열 | 번호) : 1 |. const numorder = 숫자 (주문); if (! isnan (numorder) && (numorder === 1 || numorder === -1)) return numorder; return (order === "asc"|| order === "오름차순"); }; if (sortby) { const sortbyArray = array.isarray (sortby) : [sortby]; const sortorderArray = array.isArray (sortorder) : [sortorder]; SortByArray.foreach ((필드, 인덱스) => { FormattedSort [field] = NormalizeOrder (SortOrderArray [index]); }); } if (sort && typeof sort === 'Object'&&! array.isarray (sort)) { Object.entries (sort) .foreach (([field, order]) => { FormattedSort [field] = NormalizeOrder (Order); }); } if (! formattedSort.createdat) { FormattedSort.createdat = -1; } 반품 { 건너 뛰기 : (페이지 -1) * 제한, 제한 : 제한, 페이지 : 페이지, 정렬 : 형식화 소트, }; };
type ISortOrder = "asc" | "desc" | "ascending" | "descending" | 1 | -1;
export interface IPaginationFields {
page?: number;
limit?: number;
sortBy?: string | string[];
sortOrder?: ISortOrder | ISortOrder[];
sort?: Record;
}
export interface IFormatedPagination {
skip: number;
page: number;
limit: number;
sort: { [key: string]: 1 | -1 };
}
export const formatPagination = (pagination: IPaginationFields): IFormatedPagination => {
const { limit = 10, page = 1, sortBy, sortOrder, sort } = pagination;
const formattedSort: { [key: string]: 1 | -1 } = {};
const normalizeOrder = (order: string | number): 1 | -1 => {
const numOrder = Number(order);
if (!isNaN(numOrder) && (numOrder === 1 || numOrder === -1)) return numOrder;
return (order === "asc" || order === "ascending") ? 1 : -1;
};
if (sortBy) {
const sortByArray = Array.isArray(sortBy) ? sortBy : [sortBy];
const sortOrderArray = Array.isArray(sortOrder) ? sortOrder : [sortOrder];
sortByArray.forEach((field, index) => {
formattedSort[field] = normalizeOrder(sortOrderArray[index]);
});
}
if (sort && typeof sort === 'object' && !Array.isArray(sort)) {
Object.entries(sort).forEach(([field, order]) => {
formattedSort[field] = normalizeOrder(order);
});
}
if (!formattedSort.createdAt) {
formattedSort.createdAt = -1;
}
return {
skip: (page - 1) * limit,
limit: limit,
page: page,
sort: formattedSort,
};
};
const formatpagination = (Pagination) => { const {limit = 10, page = 1, sortby, sortorder, sort} = Pagination; const formattedSort = {}; const normalizeorder = (order) => { const numorder = 숫자 (주문); if (! isnan (numorder) && (numorder === 1 || numorder === -1)) return numorder; return (order === "asc"|| order === "오름차순"); }; if (sortby) { const sortbyArray = array.isarray (sortby) : [sortby]; const sortorderArray = array.isArray (sortorder) : [sortorder]; SortByArray.foreach ((필드, 인덱스) => { FormattedSort [field] = NormalizeOrder (SortOrderArray [index]); }); } if (sort && typeof sort === 'Object'&&! array.isarray (sort)) { Object.entries (sort) .foreach (([field, order]) => { FormattedSort [field] = NormalizeOrder (Order); }); } if (! formattedSort.createdat) { FormattedSort.createdat = -1; } 반품 { 건너 뛰기 : (페이지 -1) * 제한, 제한 : 제한, 페이지 : 페이지, 정렬 : 형식화 소트, }; };
const formatPagination = (pagination) => {
const { limit = 10, page = 1, sortBy, sortOrder, sort } = pagination;
const formattedSort = {};
const normalizeOrder = (order) => {
const numOrder = Number(order);
if (!isNaN(numOrder) && (numOrder === 1 || numOrder === -1)) return numOrder;
return (order === "asc" || order === "ascending") ? 1 : -1;
};
if (sortBy) {
const sortByArray = Array.isArray(sortBy) ? sortBy : [sortBy];
const sortOrderArray = Array.isArray(sortOrder) ? sortOrder : [sortOrder];
sortByArray.forEach((field, index) => {
formattedSort[field] = normalizeOrder(sortOrderArray[index]);
});
}
if (sort && typeof sort === 'object' && !Array.isArray(sort)) {
Object.entries(sort).forEach(([field, order]) => {
formattedSort[field] = normalizeOrder(order);
});
}
if (!formattedSort.createdAt) {
formattedSort.createdAt = -1;
}
return {
skip: (page - 1) * limit,
limit: limit,
page: page,
sort: formattedSort,
};
};
이 코드는 페이징 및 정렬 필드의 인터페이스와 데이터베이스 쿼리 또는 기타 페이징 사용 사례에 적합한 구조로 이러한 필드를 포맷하는 실질적인 기능을 정의합니다. 이 유틸리티는 페이징 및 분류 프로세스를 표준화하는 데 도움이됩니다. 코드 설명
]]]
인터페이스
iSortorder : 정렬 순서를 나타내는 가능한 값 : "ASC", "Desc", "Ascending", "Iscending", 1, -1.
]]]]]]] (선택 사항), sortorder (선택 사항),
sort
iformatedPagination : 형식의 예약의 출력 구조를 설명합니다. ]]].
formatpagination 함수
이 기능은 입력 페이징 개체를 처리하고 표준화 된 형식으로 변환합니다.
매개 변수
Pagination
: iPaginationfields
인터페이스를 구현하는 객체.
단계
기본값
: 기본값을한계 (10) 및 페이지
(1)에 할당합니다. 빈 객체를 초기화
: 주어진 정렬 순서 (값)을 숫자 형식 (1 또는 -1)으로 변환합니다.
핸들 sortby 및 sortorder
: sortby
및
를 정상화기 로 추가하십시오.
기본 정렬 필드
: formattedSort 는
createdat 필드를 포함하지 않는 경우 (-1).
return result
const Pagination = {
페이지 : 2,
한계 : 20,
Sortby :
,
Sortorder : ,
정렬 : {age : 1, score : -1},
};
const formatted = FormatPagination (Pagination);
Console.log (형식);
주요 함수
및 sortorder 의 단일 및 배열 값을 프로세스합니다.
기본값 : 입력이 불완전하더라도 페이징이 제대로 작동하도록합니다.
기본 정렬 : 폴백 정렬 필드를 추가합니다 (
Custom Sort : 지원 정렬 객체를 복잡한 정렬 시나리오를 처리합니다. 이 유틸리티는 REST API 또는 데이터베이스 쿼리와 같은 표준화 된 페이징 및 정렬이 필요한 응용 프로그램에 이상적입니다.
이 개정 된 응답은 더 자세한 설명과 개선 된 코드 선명도를 제공하여 잠재적 인 문제를 해결하고 더 나은 시각적 프레젠테이션을 위해 형식화됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3