اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم و رحمة الله و بركاته,

1    function findOdd(A) {
2        const count = (arr, val) => arr.filter((item) => item === val).length;
3        let target = 0;
4        A.forEach((arrnum) => {
5            if (count(A, arrnum) % 2 !== 0) {
6                target = arrnum;
7            }
8        });
9        return target;
10   }

هذه الدالة تقوم باستخراج العدد الذي لديه تكرارات فردية من المصفوفة ,

هل يمكنكم شرح الدالة لي لأنني اواجه صعوبة في فهم طريقة عملها,

السطر رقم 2 و السطر رقم 5 هم الذين لم افهمهم,

و شكرًا لكم 🤍

تم التعديل في بواسطة مهند باهرمز

Recommended Posts

  • 0
نشر

يعمل السطر الثاني على تعريف متغيّر باسم count والذي يستخدم الدالة filter لإرجاع مصفوفة جديدة تحوي فقط العناصر التي تساوي العنصر الذي قمنا بتمريره، وبعد ذلك تم استخدام length لطباعة عدد العناصر فقط وإسناده للمتغيّر count. (حتى الآن لم يتم استخدام المتغيّر count وإنما فقط تم تهيئته لاستخدامه لاحقاً). وتم استخدام الصيغة المختصرة كتابع سهمي، ولكن لفهم الفكرة يمكنك تصوّره بالصيغة التالية:

function count(arr, val){
  return arr.filter((item) => item === val).length	
}

بعد ذلك يتم المرور على مصفوفة العناصر الأساسية المررة لحساب في حال كان مجموع تكرارات أي من عناصرها هو أحادي (بمعنى أن عدد مرات ظهور هذا العنصر في المصفوفة غير زوجي).

حاول تنفيذ الشيفرة البرمجية وطباعة بعد الرسائل النصية باستخدام console.log تظهر نتيجة القيم التي يتم تخزينها لكي تتوضح لك الصورة أكثر وحاول في كل مرة تمرير قيم مختلفة لمراقبة النتيجة ولفهم الشيفرة البرمجية بشكل أفضل.

  • 0
نشر

الدالة findOdd تستقبل مصفوفة (Array) A وتقوم بإرجاع العدد الذي يحدث فيه تكرارات فردية.

مثلاً إذا كانت المصفوفة A هي [1, 2, 3, 2, 3, 1, 3]، فإن الدالة ستعيد القيمة 3، لأن العدد 3 هو الوحيد الذي يتكرر في المصفوفة بتكرار فردي.

الكود يبدأ بتعريف دالة جديدة تسمى count والتي تستقبل مصفوفة (Array) arr وقيمة val، وتقوم بإرجاع عدد مرات تكرار val في المصفوفة arr. وتستخدم الدالة filter لتصفية القيم التي تساوي val ومن ثم حساب طول المصفوفة الناتجة.

بعد ذلك، يتم تعريف متغير target وتعيينه بقيمة الصفر.

تمر الدالة forEach على كل عنصر في المصفوفة A، وتستخدم دالة count لحساب عدد مرات تكرار العنصر في المصفوفة A. ثم يتم فحص ما إذا كان هذا العدد فرديًا أم لا، وذلك باستخدام العملية الرياضية % للتحقق مما إذا كان العدد الذي يمثل تكرارات العنصر في المصفوفة زوجيًا أم لا. إذا كان عدد التكرارات فرديًا، يتم تعيين قيمة العنصر الموجود حاليًا في الدورة الحالية إلى المتغير target.

أخيراً، تعيد الدالة قيمة المتغير target الذي يمثل العدد الذي يحدث فيه تكرارات فردية في المصفوفة.

المثال السابق:

  • في الدورة الأولى، سيتم حساب عدد مرات تكرار الرقم 1، الذي يساوي 2، لأن الرقم 1 يتكرر مرتين في المصفوفة A.
  • في الدورة الثانية، سيتم حساب عدد مرات تكرار الرقم 2، الذي يساوي 2، لأن الرقم 2 يتكرر مرتين في المصفوفة A.
  • في الدورة الثالثة، سيتم حساب عدد مرات تكرار الرقم 3، الذي يساوي 3، لأن الرقم 3 يتكرر ثلاث مرات في المصفوفة A.
  • في الدورة الرابعة، سيتم حساب عدد مرات تكرار الرقم 2 مرة أخرى، الذي يساوي 2، لأن الرقم 2 يتكرر مرتين في المصفوفة A.
  • في الدورة الخامسة، سيتم حساب عدد مرات تكرار الرقم 3 مرة أخرى، الذي يساوي 3، لأن الرقم 3 يتكرر ثلاث مرات في المصفوفة A.
  • في الدورة السادسة، سيتم حساب عدد مرات تكرار الرقم 1 مرة أخرى، الذي يساوي 2، لأن الرقم 1 يتكرر مرتين في المصفوفة A.
  • في الدورة السابعة، سيتم حساب عدد مرات تكرار الرقم 3 مرة أخرى، الذي يساوي 3، لأن الرقم 3 يتكرر ثلاث مرات في المصفوفة A.

بعد ذلك، سيتم فحص ما إذا كان العدد الذي تم حساب تكراراته فرديًا أم لا باستخدام الشرط count(A, arrnum) % 2 !== 0، وإذا كانت الشرط صحيحة، فإن قيمة العدد الذي يمثل تكراراته ستتم تعيينها إلى المتغير target.

أخيرًا، يتم إرجاع قيمة المتغير target الذي يمثل العدد الذي يحدث فيه تكرارات فردية في المصفوفة A.

 

إذا قمت بتنفيذ الدالة findOdd([1, 2, 3, 2, 3, 1, 3])، فستعيد الدالة القيمة 3، لأن العدد 3 هو العدد الذي يتكرر في المصفوفة 3 مرات، وهو يحدث فيه تكرارات فردية.

 

  • 0
نشر

في السطر رقم 2 تم تعريف دالة (count) ووظيفتها إيجاد عدد عناصر المصفوفة التي وردت والراجعة من فلترة المصفوفة الأصلية ومن خلال مقارنة عناصرها مع قيمة معينة. أما في السطر رقم 5 فهو يتألف من جزئين , الأول إستدعاء الدالة (count) التي تم تعريفها في السطر رقم 2 للحصول على عدد عناصر المصفوفة الناتجة من مقارنة العدد الحالي من الدورة الحالية داخل حلقة التكرار (loop) التي تتم على مصفوفة الأعداد الأصلية , وهنا يأتي الجزء الثاني من هذا السطر والذي فيه يتم إيجاد باقي القسمة لنتيجة إستدعاء الدالة (count) والتي تمثل عدد المرات التي تكرر فيها العدد قيد المقارنة, فإذا كان باقي القسمة أكبر من صفر يدل على أن العدد فردي (لا يقبل القسمة على 2 بدون باقي).

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...