freeCodeCamp/guide/arabic/certifications/javascript-algorithms-and-d.../basic-algorithm-scripting/chunky-monkey/index.md

12 KiB

title localeTitle
Chunky Monkey قرد مكتنز

:triangular_flag_on_post: تذكر استخدام Read-Search-Ask إذا واجهتك مشكلة. حاول إقران البرنامج :busts_in_silhouette: واكتب الكود الخاص بك :pencil:

:checkered_flag: شرح المشكلة:

هدفنا لهذه الخوارزمية هو تقسيم arr (الوسيطة الأولى) إلى أجزاء أصغر من المصفوفات بالطول الموفر حسب size (الوسيطة الثانية). هناك 4 فحوصات خضراء (أهداف) يجب تمرير كودنا لإكمال هذه الخوارزمية:

  1. (['a', 'b', 'c', 'd'], 2) المتوقع أن تكون [['a', 'b'], ['c', 'd']] (['a', 'b', 'c', 'd'], 2) [['a', 'b'], ['c', 'd']]
  2. ([0, 1, 2, 3, 4, 5], 3) من المتوقع أن يكون [[0, 1, 2], [3, 4, 5]]
  3. ([0, 1, 2, 3, 4, 5], 2) من المتوقع أن يكون [[0, 1], [2, 3], [4, 5]]
  4. ([0, 1, 2, 3, 4, 5], 4) المتوقع أن تكون [[0, 1, 2, 3], [4, 5]] ([0, 1, 2, 3, 4, 5], 4) [[0, 1, 2, 3], [4, 5]]

روابط ذات صلة

:speech_balloon: تلميح: 1

تشير الروابط أعلاه إلى استخدام Array.push() ، لذلك دعنا نبدأ أولاً بإنشاء صفيف جديد لتخزين المصفوفات الأصغر سنكون قريبًا مثل هذا:

var newArray = [];

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 2

المقبل سنقوم في حاجة الى for loop إلى حلقة من خلال arr .

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 3

وأخيرًا ، نحتاج إلى طريقة للقيام Array.slice() الفعلي ويمكننا استخدام Array.slice() للقيام بذلك. المفتاح إلى هذه الخوارزمية هو فهم كيفية عمل for loop size و Array.slice() و Array.push() معاً.

حاول أن تحل المشكلة الآن

تنبيه المفسد!

علامة تحذير

الحل في المستقبل!

:beginner: الحل الأساسي للكود:

` function chunkArrayInGroups(arr, size) {

  var temp = []; 
  var result = []; 

  for (var a = 0; a < arr.length; a++) { 
    if (a % size !== size - 1) 
      temp.push(arr[a]); 
    else { 
      temp.push(arr[a]); 
      result.push(temp); 
      temp = []; 
    } 
  } 

  if (temp.length !== 0) 
    result.push(temp); 
  return result; 
} 

`

:rocket: تشغيل الكود

شرح الشفرة:

  • أولاً ، نخلق صفيفين فارغين يُسمى temp result ، وسنعود في النهاية.
  • حلقات لدينا حلقة حتى a يساوي أو أكثر من طول المصفوفة في الاختبار.
  • داخل الحلقة ، temp.push(arr[a]); على temp temp.push(arr[a]); إذا كان الجزء المتبقي من a / size لا يساوي size - 1 .
  • خلاف ذلك ، نحن ندفع إلى temp ، ودفع temp إلى متغير result وإعادة تعيين temp إلى صفيف فارغ.
  • بعد ذلك ، إذا لم يكن temp صفيفًا فارغًا ، فإننا نضغط على result .
  • وأخيرًا ، نعيد قيمة result .

روابط ذات صلة

:sunflower: حل الشفرة المتوسطة:

function chunkArrayInGroups(arr, size) { // Break it up. var arr2 = []; for (var i = 0; i < arr.length; i+=size) { arr2.push(arr.slice(i , i+size)); } return arr2; }

:rocket: تشغيل الكود

شرح الشفرة:

  • أولاً ، نخلق مصفوفة arr2 فارغة حيث سنقوم بتخزين "قطع" لدينا.
  • تبدأ الحلقة في الصفر ، الزيادات حسب size كل مرة من خلال الحلقة ، وتتوقف عندما تصل إلى arr.length .
  • لاحظ أن هذا الحل لا حلقة عبر arr . بدلاً من ذلك ، نحن نستخدم الحلقة لإنشاء أرقام يمكننا استخدامها كمؤشرات لتقسيم المصفوفة في المواقع الصحيحة.
  • داخل الحلقة ، نقوم بإنشاء كل arr.slice(i, i+size) باستخدام arr.slice(i, i+size) ، وإضافة هذه القيمة إلى arr2 مع arr2.push() .
  • وأخيرًا ، نعيد قيمة arr2 .

روابط ذات صلة

:rotating_light: الحل المتقدم للكود:

` function chunkArrayInGroups(arr, size) { // Break it up. var newArr = []; var i = 0;

  while (i < arr.length) { 
    newArr.push(arr.slice(i, i+size)); 
    i += size; 
  } 
  return newArr; 
} 
chunkArrayInGroups(["a", "b", "c", "d"], 2); 

`

:rocket: تشغيل الكود

شرح الشفرة:

  • أولاً ، نخلق متغيرين. newArr هو مصفوفة فارغة newArr عليها. لدينا أيضًا مجموعة i المتغيرة إلى الصفر ، لاستخدامها في حلقة لدينا.

  • لدينا حلقة حلقات في حين i تساوي أو أكثر من طول الصفيف في الاختبار.

  • داخل الحلقة ، newArr صفيف arr.slice(i, i+size) باستخدام arr.slice(i, i+size) . لأول مرة يتدفق ، سيبدو مثل:

    newArr.push (arr.slice (1، 1 + 2))

  • بعد أن newArr على newArr ، نضيف متغير size إلى i .

  • وأخيرًا ، نعيد قيمة newArr .

روابط ذات صلة

:rotating_light: الحل المتقدم للكود 2:

function chunkArrayInGroups(arr, size) { var newArr = []; while (arr.length) { newArr.push(arr.splice(0,size)); } return newArr; }

:rocket: تشغيل الكود

شرح الشفرة:

  • أولا ، نخلق متغير. newArr هو مصفوفة فارغة newArr عليها.
  • لدينا while حلقات حلقة حتى طول المصفوفة في اختبار لدينا ليست 0.
  • داخل الحلقة ، newArr صفيف arr.splice(0, size) باستخدام arr.splice(0, size) .
  • لكل تكرار من حلقة while ، يحذف size عدد العناصر من مقدمة arr و يدفعها newArr إلى newArr .
  • وأخيرًا ، نعيد قيمة newArr .

روابط ذات صلة

:rotating_light: الحل المتقدم للكود 3:

function chunkArrayInGroups(arr, size) { if (arr.length <= size){ return [arr]; } else { return [arr.slice(0,size)].concat(chunkArrayInGroups(arr.slice(size),size)); } }

:rocket: تشغيل الكود

شرح الشفرة:

  • يتم إرجاع الصفيف الأصغر من الحجم المتداخل.
  • لأية صف أكبر من الحجم ، يتم تقسيمه إلى قسمين. الجزء الأول متداخل ومتصل مع الجزء الثاني الذي يجعل استدعاء متكرر.

روابط ذات صلة

:clipboard: ملاحظات للمساهمات:

  • :warning: لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
  • أضف شرحًا لحلك.
  • تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم . :traffic_light:
  • الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة . ( :warning: لا تزيل أي أسماء مستخدمين حالية )

نرى :point_right: Wiki Challenge Solution Template كمرجع.