كيفية العثور على البند الأكثر شيوعا من مجموعة؟ [محدث]

اشتكى الأشخاص من مشكلات الأداء المتعلقة بالطريقة القديمة ، ولهذا السبب قمت بتحديث هذه المقالة إلى أكثر الطرق أداءً باستخدام hashmap.

كيفية العثور على البند الأكثر شيوعا من مجموعة في جافا سكريبت؟ شيء يكافح الكثير من المطورين لاكتشافه. على الرغم من وجود الكثير من الحلول ولكن معظمها معقد للغاية ويصعب فهمه.

الناس يبحثون:
كيف،،،
 "احصل على العنصر بأعلى معدل في صفيف"
"احصل على العنصر الذي يظهر في معظم الأوقات في صفيف"
"اكتب دالة للعثور على عدد العناصر الأكثر شيوعًا في مجموعة"

مما يعني أن هناك الكثير من الناس يبحثون عن أفضل الحلول السهلة لمعرفة كيفية الحصول على العنصر الأكثر شيوعًا في الصفيف.

لذلك ، اليوم سأظهر ذلك بالضبط. "لذلك دعونا نبدأ"

الخطوة 1

أولا ، نحن بحاجة إلى إنشاء مجموعة.

var cats = ['Tom' ، 'Fluffy' ، 'Tom' ، 'Bella' ، 'Chloe' ، 'Tom' ، 'Chloe'] ؛

الآن ، لدينا مجموعة من القطط لدينا.

الخطوة 2

نحتاج إلى وظيفة ستأخذ صفيفنا كحجة ونقوم بالحساب ، تذكر! يمكننا أن نفعل أيضا كل حساب دون وظيفة ، كل شيء مجرد تفضيل. في هذا المثال ، سأذهب مع iife (تم استحضار التعبير الفوري للوظيفة).

(وظيفة (مجموعة) {
  // رمز يذهب هنا
}) ()؛

الخطوه 3

الآن ، سنقوم بإنشاء ثلاثة (3) متغيرات ، واحدة لتخزين hashmap لدينا ، والآخر لمقارنة القيمة القديمة بالقيمة التالية والأخرى لتخزين القيمة الأكثر تكرارًا النهائية في الصفيف.

(وظيفة (مجموعة) {
  var counts = {}؛ / / سنقوم بحساب حدوث العنصر هنا
  فار مقارنة = 0 ؛ // نحن بصدد المقارنة باستخدام القيمة المخزنة
  فار mostFrequent. // نحن في طريقنا لتخزين البند الأكثر شيوعا
}) ()؛

الخطوة 4

الآن ، حان الوقت لجعل حلقة داخل وظيفتنا لأداء جميع العمليات الحسابية.

// طول التخزين المؤقت في متغير لين
لـ (var i = 0 ، len = cats.length؛ i 
      إذا (counts [word]> قارن) {// counts [word]> 0 (المرة الأولى)
         مقارنة = التهم [كلمة] ؛ / / تعيين مقارنة إلى التهم [كلمة]
         mostFrequent = القطط [i] ؛ / / تعيين القيمة الأكثر تواترا
      }
 }

إذا كانت الشفرة أعلاه معقدة لبعضكم ، فاسمحوا لي أن أشرح ذلك.

  1. أولاً ، بدأنا حلقة تستمر طالما أن "i - أقل من طول مجموعة القطط".
  2. ثم ، داخل تلك الحلقة ، نقوم بحفظ العنصر الأول من صفيف القطط في "الكلمة" المتغيرة. الآن نحن نتحقق مما إذا كان كائن counts يحتوي على عنصر مهما كانت القيمة المخزنة في كلمة ، وإذا لم يكن موجودًا ، فإننا نضبط قيمة عدد الكلمات على كلمة 1.
    فمثلا:
    إذا ، الكلمة = "توم" ، ثم التهم ["توم"] = 1 ؛ سيتم تحديده إذا كانت التهم [word] غير موجودة
  3. الآن ، في التكرار التالي إذا كان التهم ["Tom"] موجودًا ، فنحن نزيده بقيمة 1 ، والذي سيكون مثل التهم ["Tom"] = التهم ["Tom"] + 1 ؛
    انتاج:
    [تعد قيمة [Tom] قيمة واحدة الآن] ،،،
    التهم ["توم"] = 1 + 1 ؛ الآن سيبدو الكائن كالتالي: {Tom: 2}
  4. الآن في التكرار التالي ، إذا كان التهم ["Fluffy"] غير موجود ، فسيتم إخراج "غير محدد" ، مما يعني إذا كانت الحالة صحيحة وسوف تضيفها في كائن العدد.
    انتاج:
    التهم ["رقيق"] = 1 ؛
    الآن سيبدو الكائن مثل ،،، counts = {Tom: 2، Fluffy: 1}؛
  5. سيتم تكرار نفس العملية لكل عنصر ، وإذا لم يكن موجودًا ، فأضفه ، وإذا كان موجودًا ، فقم بزيادة القيمة بمقدار 1.
  6. الآن دعونا نتحدث عن الثانية إذا البيان.
  7. في الحالة الثانية إذا كانت العبارة ، نحن نتحقق مما إذا كانت التهم [word] أكبر من قيمة المقارنة التي هي "0" في بداية الحلقة.
  8. لذا ، نظرًا لأن عدد ["Tom"] سينتج "2" و "2" أكبر من 0 ، ستكون الحالة صحيحة وسيتم تشغيل الكود في الداخل إذا تم تشغيل العبارة.
  9. من الداخل إذا كانت العبارة ، نحن نتحقق مما إذا كانت تعد [كلمة] ،،، [التهم] "توم"]> 0 ، ثم عيّن قيمة المقارنة إلى التهم ["توم"] ،،، الآن كما نعرف التهم ["توم" ] هو "2".
  10. لذلك ، سيتم تخزين "2" داخل متغير المقارنة.
  11. وفي المتغير الأكثر تكرارًا ، نحن اسم العنصر أكبر من المقارنة.
  12. الآن في التكرار التالي ، نتحقق مما إذا كان عدد ["Fluffy"] أكبر من المقارنة ،، وهنا قيمة المقارنة هي "2".
  13. لذلك ، إذا كان العدد ["Fluffy"] هو "3" الآن من ، ، فسيتم تعيين قيمة المقارنة على "3" ولأن "Fluffy" أكبر من المقارنة. سيتم تخزين "Fluffy" في المتغير الأكثر تكرارًا.

سوف تتكرر هذه العملية حتى تفشل الحلقة ذات المتغير "i".

في النهاية ، سنحصل على قيمة العنصر الأكثر تكرارًا في المتغير الأكثر تكرارًا. سيبدو هذا

الأكثر تكرار = 3

الآن ، كل ما علينا فعله هو التحقق مما يتم تخزينه في المتغير الأكثر تكرارًا.

console.log (القطط [mostFrequent])؛

الخطوة 5

تتيح القطعة النهائية التفاف حلقة كاملة لدينا داخل iife لدينا - (على الفور استدعاء وظيفة التعبير).

var cats = ['Tom' ، 'Fluffy' ، 'Tom' ، 'Bella' ، 'Chloe' ، 'Tom' ، 'Chloe'] ؛
var counts = {}؛
فار مقارنة = 0 ؛
فار mostFrequent.
(وظيفة (مجموعة) {
   لـ (var i = 0 ، len = array.length؛ i  قارن) {
             مقارنة = التهم [كلمة] ؛
             mostFrequent = القطط [i] ؛
       }
    }
  العودة الأكثر تكرار ؛
}) (القطط)؛
ملاحظة: لقد غيرت cats.length إلى array.length لأن هذه هي حجة الوظيفة التي تساوي مجموعة cats لدينا.

حسنًا ، هذا ،،، هذا ما تجده أكثر العناصر شيوعًا في صفيف

أداء؟؟ حسنًا ، لقد اختبرت هذا المثال بمثال آخر يستخدم الاختصار لتحقيق نفس النتائج ، لكن هذه الطريقة أكثر فاعلية من التخفيض حتى وإن كانت تحقق نفس النتائج.

تحقق من حالة اختبار الأداء هنا: انقر هنا

إذا كان المثال أعلاه لا يزال معقدًا ، فلا تتردد في التعليق أو الاتصال بي عبر || تويتر: @ AMJustSam

أيضًا ، إذا لم تكن قد قرأت مقالي السابق حول كيفية توسيط رأسياً في CSS ، فإليك الرابط هنا - انقر هنا

إذا كنت تحب المحتوى ، فلا تتردد في التوصية بهذه المقالة للآخرين ، بحيث يمكن للآخرين الاستفادة منها أيضًا!