يحدد ECMASCRIPT5 طريقتين دمج للصفائف: تقليل () وخفض (). تتكرر كلتا الطريقتين عبر العناصر التعسفية للمصفوفة ثم بناء قيمة نهائية تم إرجاعها. تبدأ طريقة تقليل () من العنصر الأول من المصفوفة وتتكرر خلال نهاية المصفوفة واحدة تلو الأخرى. طريقة التخفيض () هي عكس ذلك تمامًا. يبدأ من العنصر الأخير من المصفوفة ويمضي إلى الأمام إلى العنصر الأول.
تتلقى كلتا الطريقتين معلمتين: دالة تسمى كل عنصر والقيمة الأولية كأساس للدمج. تم تمرير الوظيفة التي تم تمريرها لتقليل () و تخفيضها () 4 معلمات: القيمة السابقة ، والقيمة الحالية ، وفهرس العنصر ، وكائن الصفيف. سيتم تمرير أي قيمة يتم إرجاعها بواسطة هذه الوظيفة تلقائيًا إلى العنصر التالي باعتباره المعلمة الأولى. يحدث التكرار الأول على المدة الثانية من الصفيف ، وبالتالي فإن المعلمة الأولى هي المصطلح الأول من الصفيف ، والمعلمة الثانية هي المصطلح الثاني للمصفوفة.
على سبيل المثال ، يمكننا استخدام طريقة ExtR () للعثور على مجموع جميع القيم في صفيف.
var nums = [1،2،3،4،5] ؛ var sum = nums.reduce (function (prev ، cur ، index ، array) {retrun pre + cur ؛}) ؛في الكود أعلاه ، في المرة الأولى التي يتم فيها تنفيذ وظيفة رد الاتصال ، تكون PRIM هي 1 و CUR هي 2. المرة الثانية التي تدور حولها هي 3 و CUR هي 3. ستكرر طريقة تقليل () هذه العملية حتى يتم الوصول إلى كل عنصر في الصفيف مرة واحدة ، وأخيراً تعيين النتيجة التي تم إرجاعها إلى مجموع.
تشبه طريقة التخفيض () اليسار واليمين ، ولكن يتم تنفيذها في الاتجاه المعاكس. على سبيل المثال:
var nums = [1،2،3،4،5] ؛ var sum = nums.reduceright (function (prev ، cur ، index ، array) {retrun pre + cur ؛}) ؛في هذا المثال ، في المرة الأولى التي يتم فيها تنفيذ وظيفة رد الاتصال ، تكون DRED 5 و CUR هي 4. النتيجة المبلغ النهائي هي نفس طريقة التخفيض () ، كلاهما 15.
المتصفحات التي تدعم تقليص () و Enduceright () هي: IE9+، Firefox3+، Safari4+، Opera10.5+والكروم.
تجديد
يضيف ECMASCript5 أيضًا طريقتين جديدتين لدمج المصفوفات: تقليل () وخفض ().
كلاهما يتكرر على جميع العناصر في المصفوفة
قلل (): تكرار واحد تلو الآخر من العنصر الأول إلى النهاية.
التخفيض (): بدءًا من البند الأخير من الصفيف ، مع التكرار إلى العنصر الأول من الصفيف.
كلتا الطريقتين تقبلان معلمتين: الوظيفة المسمى على كل عنصر (المعلمات هي: القيمة السابقة ، القيمة الحالية ، فهرس العنصر ، كائن الصفيف)
سيتم تمرير أي قيمة يتم إرجاعها بواسطة هذه الوظيفة تلقائيًا إلى العنصر التالي باعتباره المعلمة الأولى. يحدث التكرار الأول على العنصر الثاني من المصفوفة ،
لذلك ، المعلمة الأولى هي العنصر الأول من الصفيف ، والمعلمة الثانية هي العنصر الثاني من المصفوفة
وكقيمة الأولية لقاعدة الدمج.
استخدم طريقة تقليل () لأداء مجموع جميع القيم في صفيف ، مثل:
VAR DATIONS = [1 ، 2 ، 3 ، 4 ، 5] ؛ var sum = date.reduce (function (prev ، cur ، index ، array) {return prev + cur ؛}) ؛ تنبيه (مجموع) ؛ // النتيجة هي نفسها ، ولكن الاتجاه هو VAR sum2 = values.reduceright (الدالة (prev ، cur ، index ، array) {return prev+cur ؛}) ؛ تنبيه (sum2) ؛دمج فرز هو خوارزمية فرز فعالة تستند إلى عملية دمج. هذه الخوارزمية هي تطبيق نموذجي للغاية للانقسام والقهر.
تتمثل طريقة فرز الدمج في دمج جدولين مرتبة (أو أكثر من اثنين) في جدول جديد مرتبة ، أي تقسيم التسلسل المراد فرزه إلى عدة متابعات ، يتم طلب كل بعد. ثم يتم دمج بعد المرتبة في التسلسل العام.
دمج الفرز هو خوارزمية فرز فعالة تستند إلى عملية دمج. هذه الخوارزمية هي تطبيق نموذجي للغاية للانقسام والقهر. دمج المتسلسلات المطلوبة للحصول على تسلسل تم ترتيبها بالكامل ؛ وهذا هو ، اجعل كل من الدرجة الأولى من الدرجة الأولى ، ثم قم بتوفير طلب شرائح اللاحقة. إذا تم دمج جدولين تم طلبهما في جدول واحد مرتبة ، يسمى دمج ثنائي الاتجاه.