
عندما يتعلق الأمر بالشفرة في جافا سكريبت ، وجد المطورون أن تقليل الوظيفة هو أحد أصعب المفاهيم التي يجب كسرها. وفقا ويكيبيديا ، Reduce لديه أسماء متعددة بمعنى. تتراكم ، أضعاف ، ضغط وجمع. هذه الأسماء تشير بوضوح إلى معنى وعمل تقليل وظيفة. الفكرة وراء ذلك هي تقسيم الهيكل إلى قيمة واحدة. وبالتالي ، يمكن تعريف Reduce كدالة تقوم بتحويل قائمة إلى أي نوع بيانات.
على سبيل المثال ، يمكنك تقليل صفيف [5،4،3،2،1] إلى القيمة 15 عن طريق إضافتها فقط.وظيفة تقليل تبقي المطورين بعيدا عن استخدام حلقة من أجل طي قائمة في قيمة واحدة.
في هذه المدونة ، ستتعلم طرقًا لتنفيذ وظائف معروفة باستخدام الاختزال كما فعل بالفعل من قبل المطورين في
أفضل شركة لتطوير البرمجيات .
لقد أدرجت 10 وظائف أداة جافا سكريبت إعادة إنشاؤها باستخدام وظيفة الحد. لذلك ، تحقق أدناه هذه الوظائف: -المعلمات المستخدمة
مجموعة (لتحويل قائمة العناصر) ، وظيفة تحويل (هي وظيفة تستخدم لتشغيل كل عنصر)
العمل
باستخدام convertFunction المعطى ، يتم تحويل كل عنصر في الصفيف المحدد وإرجاع صفيف جديد من العناصر.
كيفية التنفيذ؟
const map = (transformFunction, array1) => array1.reduce((newArray1, xyz) => { newArray1.push(transformFunction(xyz)); return newArray1; }, [] );
استخدام حالة:
const double = (x) => x * 2; const reverseString = (string) => string .split('') .reverse() .join(''); map(double, [200, 300, 400]); Output: [400, 600, 800] map(reverseString, ['Hello Alka', 'I love cooking']);
المعلمات المستخدمة
صفيف (قائمة العناصر / القيم المراد تصفيتها) ، المسند (دالة ترجع قيمة صواب أو خطأ)
العمل
رفض لديه سلوك معاكس للتصفية ولكن نفس الشيء من هذا القبيل. إذا أعادت المسند قيمة خاطئة ، فسيتم إضافة العنصر فقط إلى الصفيف الجديد. آخر ، سيتم استبعاد العنصر من الصفيف الجديد.
كيفية التنفيذ؟
const reject = (predicate, arr3) => arr3.reduce((newArray, val3) => { if (predicate(val3) === false) { newArray.push(val3); } return newArray; }, [] );
استخدام حالة:
const isEven = (z) => z % 2 === 0; reject(isEven, [1, 6, 4, 3]);
المعلمات المستخدمة
المصفوفة (قائمة العناصر) ، المخفض (هي وظيفة تستقبل معلمتين ، أي المركب والعنصر الحالي من قائمة المصفوفة)
العمل
عملها مشابه للتقليل ولكن بدلاً من إرجاع القيمة المفردة كنتيجة ، فإنها تُرجع قائمة بكل قيمة مخفضة تتوافق مع المخرجات الفردية.
كيفية التنفيذ؟
const scan = (reducer, initialVal, array) => { const reducedValues = []; array.reduce((acc, currentval) => { const newAcc = reducer(acc, currentval); reducedValues.push(newAcc); return newAcc; }, initialVal); return reducedValues; };
استخدام حالة:
const add = (y, z) => y + z; const multiply = (y, z) => y * z; scan(add, 0, [1, 2, 3, 4]);
المعلمات المستخدمة
مجموعة (لتصفية قائمة العناصر) ، المسند (هي دالة لإرجاع قيمة خاطئة أو صحيحة)
العمل
هنا ، سوف تحصل على مجموعة جديدة كإخراج. إذا أرجعت الدالة المسند القيمة الحقيقية ، فسيتم إضافة العنصر إلى الصفيف الجديد. ومع ذلك ، إذا تم إرجاع false ، فسيتم استبعاد العنصر من الصفيف الجديد.
كيفية التنفيذ؟
const filter = (predicate, arr1) => arr1.reduce((newArray, val) => { if (predicate(val) === true) { newArray.push(val); } return newArray; }, [ ] );
استخدام حالة:
const isEven = (y) => y % 2 === 0; filter(isEven, [3, 2, 5]);
المعلمات المستخدمة
الصفيف (عناصر القائمة المراد اختبارها) ، المسند (دالة لإرجاع القيمة صواب أو خطأ)
العمل
هنا ، لا شيء يُرجع القيمة الحقيقية إذا أعادت المسند قيمة خاطئة لكل عنصر. إلا أنه سيعود قيمة خاطئة لكل قيمة حقيقية من المسند.
كيفية التنفيذ؟
const none = (predicate, array) => array.reduce((acc1, val1) => !acc1 && !predicate(val1), false);
استخدام حالة:
const isEven2 = (x) => x % 2 === 0; none(isEven2, [1, 3, 5]);
المعلمات المستخدمة
مجموعة (تحتوي على قائمة العناصر) ، المسند (دالة إرجاع قيمة خاطئة أو صحيحة)
العمل
يحدد تقسيم الصفيف إلى قسمين بناءً على القيمة الأصلية. إذا أعادت المسند قيمة حقيقية ، فسيذهب العنصر إلى القائمة 1. آخر ، سوف يذهب إلى list2. تم استخدام طريقة تقسيم الصفيف إلى أجزاء متعددة بواسطة مبرمجي العصر الحالي المرتبطين بكبرى شركات تطوير البرمجيات. دعنا نلقي نظرة على الخطوات الإضافية:
كيفية التنفيذ؟
const partition = (predicate, array) => array.reduce( (result3, item) => { const [list1, list2] = result; if (predicate(item) === true) { list1.push(item); } else { list2.push(item); } return result3; }, [ [], [] ] );
استخدام حالة:
const isEven = (z) => z % 2 === 0; partition(isEven, [1, 2, 3]);
المعلمات المستخدمة
مجموعة (لاختبار قائمة العناصر) ، المسند (هي دالة لإرجاع قيمة صواب أو خطأ)
العمل
عند تقديم قيمة إدخال ، إذا كانت القيمة المسندة تُرجع القيمة true ، فستُرجع الكل القيمة true. آخر ، فإنه سيعود قيمة خاطئة.
كيفية التنفيذ؟
const all = (predicate, array) => array.reduce((arr, val) => arr && predicate(val), true);
استخدام حالة:
const sequl3 = (x) => x === 3; all(sequl3, [3]);
المعلمات المستخدمة
مجموعة (لاختبار قائمة العناصر) ، المسند (هي دالة لإرجاع قيمة صواب أو خطأ)
العمل
للحصول على أي قيمة إدخال ، إذا كانت قيمة المسند صحيحة ، فسوف يعود بعضها إلى صواب. خلاف ذلك ، فإنه سيعود قيمة خاطئة.
كيفية التنفيذ؟
لنأخذ مثالا على ذلك: const some = (predicate, array) => array.reduce((arc, val) => arc || predicate(val), false);
استخدام حالة:
const aqua3 = (x) => x === 3; some(aqua3, [3]);
المعلمات المستخدمة
مجموعة (لتخزين قيمة العناصر) ، مفتاح (انتزاع اسم المفتاح من الكائن)
العمل
يمكنه انتزاع المفتاح المحدد من كل عنصر في الصفيف وإرجاع مجموعة جديدة من القيم المعنية.
كيفية التنفيذ؟
const pluck = (key3, array) => array.reduce((values3, current) => { values.push(current[key3]); return values3; }, [] );
استخدام حالة:
pluck('name', [{ name: 'Soman' }, { name: 'Rovin' }, { name: 'Jojo' }]);
المعلمات المستخدمة
المصفوفة (للبحث عن العناصر في قائمة المصفوفة) ، المسند (دالة ترجع قيمة خاطئة أو حقيقية)
العمل
سيعود العنصر الأول الذي يطابق المسند المعطى وفي حالة عدم العثور على تطابق ، يتم إرجاع غير معرف مرة أخرى.
كيفية التنفيذ؟
const find = (predicate, array) => array.reduce((output, item) => { if (output !== undefined) { return output; } if (predicate(item) === true) { return item; } return undefined; }, undefined);
استخدام حالة:
const isEven = (a) => a % 2 === 0; find(isEven, []);
ملاحظة أخيرة:
هذه هي الطريقة التي يمكنك بها تنفيذ وظائف الأداة المساعدة JavaScript باستخدام تقليل وقت أقل. هذا سيساعد بالتأكيد مطوري البرمجيات في توفير الوقت وكذلك جهود الترميز الخاصة بهم. في حال كنت بحاجة إلى دعم مثالي لاستعلامات الترميز الخاصة بك ، يمكنك الاتصال بشركة تطوير برمجيات متخصصة لتلبية احتياجات مشروعك.