سيناريو التطبيق:
دعم طرق الفرز المتعددة:
https: // your-url؟ sort [first_name] = desc & sort [last_name] = asc
https: // your-url؟ sime [first_name] = تصاعدي وفرز [last_name] = defcending
https: // your-url؟ sort [first_name] = 1 & sort [last_name] = -1
تدعم هذه الوظيفة أيضًا الفرز باستخدام sortby
و sortorder
الحقول: https: // your-url؟ sortorder = desc & sortby = last_name
]
رمز TypeScript:
تصدير واجهة ipaginationfields { الصفحة؟: رقم ؛ الحد؟: العدد ؛ sortby؟: سلسلة |. sortorder؟: isortorder |. فرز؟: سجل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,
};
};
رمز JavaScript: const formatpagination = (تراجع) => { const {limit = 10 ، page = 1 ، sortby ، sortorder ، sort} = pagination ؛ const formattedSort = {} ؛ const normalizeorder = (الطلب) => { const numorder = number (order) ؛ if (! isnan (numorder) && (numorder === 1 || numorder === -1)) return numorder ؛ العودة (order === "ASC" || order === "تصاعدي")؟ } ؛ إذا (sortby) { const sortbyarray = array.isarray (sortby)؟ constorderarray = array.isarray (sortorder)؟ sortbyarray.foreach ((الحقل ، الفهرس) => { formattedSort [field] = nordalizeorder (sortorderarray [index]) ؛ }) ؛ } if (sort && typeof sort === 'Object' &&! array.isarray (sort)) { Object.Entries (sort). foreach (([الحقل ، الطلب]) => { formattedSort [الحقل] = تطبيع order (order) ؛ }) ؛ } if (! formattedsort.createdat) { formattedsort.createdat = -1 ؛ } يعود { تخطي: (صفحة - 1) * الحد ، الحد: الحد ، الصفحة: الصفحة ، النوع: 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" ، "تصاعدي" ، "تنازلي" ، 1 ، -1.
: صف بنية الإدخال للترقيم والفرز: صفحة
(اختياري) ، limit
(اختياري) ، ]]]]]]]]]) (اختياري) ،
sortorder (اختياري) ،
الفرز (اختياري).
iformatedPagination
Skip ،
. ]]].
formatpagination
وظيفة
تقوم هذه الوظيفة بمعالجة كائن ترحيل الإدخال وتحويله إلى تنسيق موحد.
تراجع
: كائن ينفذ واجهةipaginationFields .
: تعيين القيم الافتراضية لـ limit (10) و
صفحة لتخزين حقول الفرز المنسقة.
وظيفة المساعد:
NormalizeOrder
: يحول ترتيب الفرز المعطى (القيمة) إلى تنسيق رقمي (1 أو -1).
التعامل مع ، قم بتحويلها إلى صفيف (إن لم يكن بالفعل) ، وأضفها إلى
formattedsort باستخدام
التعامل مع
فرز كائن
: إذا كان يتم تحويل قيمة كل مفتاح إلى ترتيب رقمي وإضافة إلى formattedSort
.
حقل الفرز الافتراضي
: إذا كان
return return : إرجاع كائن مع السمات التالية:
Skip ،
]]].
وظائف رئيسية
sortorder .
الافتراضي: حتى لو كان الإدخال غير مكتمل ، فإنه يضمن أن الترحيل يعمل بشكل صحيح.
التصنيف الافتراضي: إضافة حقل فرز Froprack (
CreateAt ).
الفرز المخصص: يدعم
فرز
يوفر هذا الاستجابة المنقحة تفسيرات أكثر تفصيلاً ووضوحًا محسّنًا للكود ، ويعالج القضايا المحتملة وتعزيز قابلية القراءة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3