"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فرز حقول متعددة مع وظيفة حفظ الوقت لمطور جانب الخادم (تراجع API)

فرز حقول متعددة مع وظيفة حفظ الوقت لمطور جانب الخادم (تراجع API)

نشر في 2025-02-24
تصفح:186

Multiple fields sorting with a time saving function for server side developer (api pagination)

سيناريو التطبيق:

دعم طرق الفرز المتعددة:

  • ASC https: // your-url؟ sort [first_name] = desc & sort [last_name] = asc
  • ]]
  • استخدم تصاعديًا أو نزولًا: https: // your-url؟ sime [first_name] = تصاعدي وفرز [last_name] = defcending
  • استخدم 1 أو -1: 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 |. فرز؟: سجل ؛ } تصدير واجهة IformatedPagination { تخطي: رقم ؛ الصفحة: الرقم ؛ الحد: العدد ؛ النوع: {[المفتاح: سلسلة]: 1 | } تصدير const formatpagination = (ترقيم الصفحات: ipaginationfields): iformatedPagination => { const {limit = 10 ، page = 1 ، sortby ، sortorder ، sort} = pagination ؛ const formattedsort: {[key: string]: 1 | const nordalizeorder = (ترتيب: سلسلة | رقم): 1 | 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 ، } ؛ } ؛
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.

ipaginationfields

: صف بنية الإدخال للترقيم والفرز: صفحة (اختياري) ، limit (اختياري) ، ]]]]]]]]]) (اختياري) ، sortorder (اختياري) ، الفرز (اختياري). iformatedPagination

: صف بنية الإخراج للتراجع المنسق:

Skip ، . ]]]. formatpagination وظيفة تقوم هذه الوظيفة بمعالجة كائن ترحيل الإدخال وتحويله إلى تنسيق موحد.

المعلمة

تراجع

: كائن ينفذ واجهة

ipaginationFields .

  • خطوة
القيمة الافتراضية

: تعيين القيم الافتراضية لـ limit (10) و

صفحة
    (1). تهيئة كائن فارغ
  • يتم استخدام FormattedSort

    لتخزين حقول الفرز المنسقة. وظيفة المساعد: NormalizeOrder : يحول ترتيب الفرز المعطى (القيمة) إلى تنسيق رقمي (1 أو -1).

  • التعامل مع ، قم بتحويلها إلى صفيف (إن لم يكن بالفعل) ، وأضفها إلى formattedsort باستخدام

  • التعامل مع فرز كائن : إذا كان يتم تحويل قيمة كل مفتاح إلى ترتيب رقمي وإضافة إلى formattedSort . حقل الفرز الافتراضي : إذا كان

    formattedSort
  • لا يحتوي على الحقل
  • ، فقم بإضافته وتعيين ترتيب الفرز الخاص به (-1).

    return return : إرجاع كائن مع السمات التالية: Skip ، ]]].

  • const pagination = { الصفحة: 2 ، الحد: 20 ، Sortby: ["الاسم" ، "التاريخ"] ، Sortorder: ['asc' ، 'desc'] ، النوع: {العمر: 1 ، الدرجة: -1} ، } ؛ const تنسيق = formatpagination (ترقيم الصفحات) ؛ console.log (تنسيق) ؛

    وظائف رئيسية

    إدخال مرن: يعالج قيم صفيف فردية من
  • sortby
  • و

    sortorder . الافتراضي: حتى لو كان الإدخال غير مكتمل ، فإنه يضمن أن الترحيل يعمل بشكل صحيح. التصنيف الافتراضي: إضافة حقل فرز Froprack ( CreateAt ). الفرز المخصص: يدعم فرز

    كائنات للتعامل مع سيناريوهات الفرز المعقدة. هذه الأداة المساعدة مثالية للتطبيقات التي تتطلب ترحيلًا وفرزًا موحدًا ، مثل استعلامات واجهات برمجة تطبيقات REST أو استعلامات قاعدة البيانات.
 يوفر هذا الاستجابة المنقحة تفسيرات أكثر تفصيلاً ووضوحًا محسّنًا للكود ، ويعالج القضايا المحتملة وتعزيز قابلية القراءة.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3