اليوم اسمحوا لي أن أقدم لكم هذه الطريقة بالتفصيل، وآمل أن تكون مفيدة لكم. هذا هو الاستخدام الأساسي للتقليل: التخفيض هو أسلوب في كائن النموذج الأولي للمصفوفة يساعدنا في تشغيل المصفوفات. يأخذ دالة أخرى كوسيطة، والتي يمكن أن تسمى المخفض. المخفض يأخذ معلمتين. المعلمة الأولى param1 هي نتيجة تشغيل المخفض الأخير. إذا كانت هذه هي المرة الأولى التي يتم فيها تشغيل المخفض، فإن القيمة الافتراضية لـ param1 هي قيمة العنصر الأول في المصفوفة. يتكرر أسلوب التخفيض خلال كل عنصر في المصفوفة، تمامًا كما هو الحال في حلقة for. وقم بتمرير القيمة الحالية في الحلقة كمعلمة 2. بعد اجتياز المصفوفة، سيُرجع التخفيض النتيجة المحسوبة بواسطة المخفض الأخير. دعونا نلقي نظرة على مثال مفصل. بعد ذلك، دعونا نستكشف كيفية تنفيذ التعليمات البرمجية أعلاه. في هذا الكود، يتم إضافة المخفض. أولاً، نظرًا لأننا ننفذ عملية الإضافة لأول مرة، فسيتم التعامل مع العنصر الأول "a" في المصفوفة باعتباره المعلمة الأولى للإضافة، ثم ستبدأ الحلقة من العنصر الثاني "b" في المصفوفة. هذه المرة، "b" هي الوسيطة الثانية التي يجب إضافتها. بعد العملية الحسابية الأولى، نحصل على النتيجة "ab". سيتم تخزين هذه النتيجة مؤقتًا واستخدامها كمعلمة 1 في حساب الإضافة التالي. في الوقت نفسه، سيتم استخدام المعلمة الثالثة "c" في المصفوفة كمعلمة 2 للإضافة. وبالمثل، يستمر التخفيض خلال العناصر الموجودة في المصفوفة، مع تشغيل "abc" و"d" كوسائط لإضافتها. أخيرًا، بعد اجتياز العنصر الأخير في المصفوفة، يتم إرجاع نتيجة الحساب. الآن لدينا النتيجة: "abcde". لذلك، يمكننا أن نرى أن التخفيض هو أيضًا وسيلة لاجتياز مصفوفة! يأخذ قيمة كل عنصر في المصفوفة بدوره وينفذ وظيفة المخفض. لكن يمكننا أن نرى أن الحلقة أعلاه لا تتمتع بهذا الجمال المتناغم. لأننا نأخذ العنصر الأول من المصفوفة، وهو "a"، باعتباره المعلمة الأولية 1، ثم نمر عبر العنصر الثاني من المصفوفة للحصول على المعلمة 2. في الواقع، يمكننا تحديد المعلمة الثانية في التخفيض كقيمة أولية لـ param1 لوظيفة المخفض، بحيث سيتم الحصول على المعلمة 2 في حلقة تبدأ من العنصر الأول في المصفوفة. الرمز هو كما يلي: هذه المرة، نسمي المخفض أولاً بـ 's' كـ param1، ثم نكرر ذلك عبر المصفوفة بدءًا من العنصر الأول. حتى نتمكن من إعادة كتابة مقتطف الكود الأول الخاص بنا باستخدام بناء الجملة هذا. بعد ذلك، سوف ندخل إلى فصل البرمجة الفعلي لتجربة قوة التخفيض القوية. ماذا ستفعل إذا أردنا الحصول على مجموع كل العناصر في المصفوفة؟ بشكل عام، يمكنك كتابة شيء مثل هذا: بالطبع، قد يكون لديك طرق أخرى لكتابتها، ولكن طالما أنك تستخدم حلقة for، فإن الكود سيصبح زائدًا عن الحاجة. ثم دعونا نلقي نظرة على ما تفعله وظيفة التراكم أعلاه: تعيين المبلغ الأولي إلى الصفر احصل على العنصر الأول في المصفوفة وقم بجمعه تخزين نتيجة الخطوة السابقة في المجموع قم بإزالة العناصر الأخرى في المصفوفة بدورها وقم بتنفيذ العمليات المذكورة أعلاه عودة النتيجة النهائية يمكننا أن نرى أنه عندما نصف الخطوات المذكورة أعلاه بالكلمات، فمن الواضح أنها تتوافق مع استخدام التخفيض. حتى نتمكن من إعادة كتابة الكود أعلاه باستخدام تقليل: إذا كنت معتادًا على استخدام وظائف الأسهم، فسيبدو الكود أعلاه أكثر وضوحًا: سطر واحد من التعليمات البرمجية ويتم! وبطبيعة الحال، الضرب التراكمي والتراكم هي نفسها تماما: في كثير من الأحيان، نحتاج إلى إضافة وزن عند الجمع، والذي يمكن أن يعكس بشكل أفضل أناقة الاختزال. إذا كنت ترغب في الحصول على الحد الأقصى والحد الأدنى لقيم المصفوفة، يمكنك كتابة: هذا هو نفسه كما كان من قبل، إذا استخدمنا تقليل يمكننا القيام بذلك في سطر واحد من التعليمات البرمجية. غالبًا ما نحتاج إلى حساب عدد مرات ظهور كل عنصر في المصفوفة. تساعدنا طريقة التخفيض على تحقيق ذلك. لاحظ أننا نستخدم كائنات الخريطة بدلاً من الكائنات لتخزين الترددات الإحصائية، لأن العناصر الموجودة في المصفوفة قد تكون من نوع الكائن، ومفاتيح الكائنات يمكن أن تكون من أنواع السلسلة أو الرموز فقط. فيما يلي مثالان: وبالمثل، إذا كنت تريد حساب تكرار كل حرف في سلسلة، فيمكنك أولاً تحويل السلسلة إلى مصفوفة أحرف، ثم اتباع الطريقة المذكورة أعلاه. نظرًا لأنه يمكن استخدام أنواع الأحرف كمفاتيح للكائنات، فلن نستخدم الخريطة هنا. يتم الوصول إلى كل عنصر في المصفوفة بشكل تسلسلي من خلال التخفيض. إذا وجدنا أن العنصر لا يزال مصفوفة، فإننا نسمي الطريقة المسطحة بشكل متكرر. مقدمة
فار آر = [1, 2, 3];
وظيفة المخفض (parmar1، parmar2) {
}
arr.reduce (المخفض)
var arr = ['a', 'b', 'c', 'd', 'e'];
إضافة وظيفة (س، ص) {
العودة س + ص؛
}
آر.تقليل (إضافة)
var arr = ['a', 'b', 'c', 'd', 'e'];
إضافة وظيفة (س، ص) {
العودة س + ص؛
}
arr.reduce(إضافة، 's')
var arr = ['a', 'b', 'c', 'd', 'e'];
إضافة وظيفة (س، ص) {
العودة س + ص؛
}
arr.reduce(إضافة، '')
1. التراكم والضرب التراكمي
تراكم الوظيفة (arr) {
دع المبلغ = 0؛
for (let i = 0; i < arr.length; i++) {
المبلغ = المبلغ + arr[i];
}
مبلغ الإرجاع؛
}
تراكم الوظيفة (arr) {
وظيفة المخفض (س، ص) {
العودة س + ص
}
إرجاع arr.reduce(reducer, 0);
}
تراكم الوظيفة (arr) {
إرجاع arr.reduce((x, y) => x + y, 0);
}
وظيفة الضرب (آر) {
إرجاع arr.reduce((x, y) => x * y, 1);
}
الدرجات الثابتة = [
{ الدرجة: 90، الموضوع: "HTML"، الوزن: 0.2 }،
{ الدرجة: 95، المادة: "CSS"، الوزن: 0.3 }،
{ النتيجة: 85، الموضوع: "جافا سكريبت"، الوزن: 0.5 }
];
نتيجة const = Scores.reduce((x, y) => x + y.score * y.weight, 0);
2. احصل على الحد الأقصى والحد الأدنى لقيم المصفوفة
وظيفة ماكس (آر) {
Let max = arr[0];
ل (دع عنصر آر) {
إذا (إلي > الحد الأقصى) {
الحد الأقصى = إيلي؛
}
}
العودة ماكس؛
}
دع arr = [3.24, 2.78, 999];
arr.reduce((x, y) => Math.max(x, y));
arr.reduce((x, y) => Math.min(x, y));
3. احسب تكرار ظهور العناصر في المصفوفة
وظيفة العد التردد (arr) {
إرجاع arr.reduce(function(result, ele){
// الحكم على ما إذا كان هذا العنصر قد تم حسابه من قبل
إذا (result.get(ele) != غير محدد) {
/**
* إذا تم حساب هذا العنصر من قبل،
*زيادة تكرار حدوثه بمقدار 1
*/
result.set(ele, result.get(ele) + 1)
} آخر {
/**
* إذا لم يتم احتساب هذا العنصر من قبل،
* اضبط تكرار حدوثه على 1
*/
result.set(ele, 1);
}
نتيجة الإرجاع؛
}، خريطة جديدة ())؛
}
دع str = 'helloworld';
str.split('').reduce((result,currentChar) => {
result[currentChar] ? result[currentChar] ++ : result[currentChar] = 1;
نتيجة الإرجاع؛
}، {})
4. تسطيح صفائف متعددة
وظيفة مسطحة(arr = []) {
إرجاع arr.reduce((t, v) => t.concat(Array.isArray(v) ? Flat(v) : v), [])
}