сценарий приложения:
]asc
https: // your-url? Sort [first_name] = desc & sort [fast_name] = asc Используйте восходящую или нисходящую:
https: // your-url? Sort [first_name] = ascending & sort [fast_name] = gancending используйте 1 или -1:
https: // your-url?
sortby
и https: // your-url? Sortordor = desc & sortby = fast_name
]]]
код TypeScript:
javascript code:
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 = number (order);
if (! isnan (numorder) && (numomore === 1 || numorome === -1)) вернуть Numorder;
return (order === "asc"
};
if (sortby) {
const sortbyarray = array.isarray (sortby)?
const sortorderray = array.isarray (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;
}
возвращаться {
Skip: (Page - 1) * Limit,
предел: предел,
Страница: страница,
Сортировка: FormattedSort,
};
}; обзор
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", "Discending", 1, -1. ]
ipaginationFields: Опишите структуру ввода лиц и сортировки: page
(необязательно),
sortby ]]] ]]]]]]]]] (Необязательно),
sortorder (необязательно),
sort (необязательно).
]
iformatedPagination : Опишите структуру вывода форматированной страниц:
skip ,
page
limit ,
sort ] ]]].
]
formatPagination function
]
эта функция обрабатывает входной объект подкидки и преобразует его в стандартизированный формат.
]
parameter
]
Pagination
: объект, который реализует интерфейс iPaginationFields .
]шаг
]
значение по умолчанию : назначить значения по умолчанию Limit
(10) и formattedStort используется для хранения форматированных полей сортировки. ]
]
]
Helper Function: normalizeorder
]
gange
sortby и
sortby и sortordor , Преобразовать их в массив (если еще не), и добавьте их в
formattedSort с использованием
normalizeorder . ]
]
]
gange
sort object
: if
to to to to to to to to to to to to Значение каждого ключа преобразуется в числовой порядок и добавляется в formattedSort .
]
]
]
по умолчанию Sort Sort
: if formattedSort
не содержит поля
]
]
return result
: возвращать объект со следующими атрибутами: skip
,
, sort ]. ]
]
]
const pagination = {
Страница: 2,
Предел: 20,
sortby: ['name', 'date'],
sortorder: ['asc', 'desc'],
Сортировка: {возраст: 1, оценка: -1},
};
const formatted = formatpagination (страница);
console.log (formatted);
]
const pagination = {
page: 2,
limit: 20,
sortBy: ['name', 'date'],
sortOrder: ['asc', 'desc'],
sort: { age: 1, score: -1 },
};
const formatted = formatPagination(pagination);
console.log(formatted);
и sortorder . ]
по умолчанию: даже если ввод неполный, он гарантирует, что пейджинг работает должным образом. creatementAt
). ]
Custom Sort: поддерживает Этот пересмотренный ответ обеспечивает более подробные объяснения и улучшенную ясность кода, решает потенциальные проблемы и улучшая читаемость.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3