11 KiB
title, localeTitle
| title | localeTitle |
|---|---|
| Chunky Monkey | قرد مكتنز |
تذكر استخدام Read-Search-Ask إذا واجهتك مشكلة. حاول إقران البرنامج
واكتب الكود الخاص بك 
شرح المشكلة:
هدفنا لهذه الخوارزمية هو تقسيم arr (الوسيطة الأولى) إلى أجزاء أصغر من المصفوفات بالطول الموفر حسب size (الوسيطة الثانية). هناك 4 فحوصات خضراء (أهداف) يجب تمرير كودنا لإكمال هذه الخوارزمية:
(['a', 'b', 'c', 'd'], 2)المتوقع أن تكون[['a', 'b'], ['c', 'd']](['a', 'b', 'c', 'd'], 2)[['a', 'b'], ['c', 'd']]([0, 1, 2, 3, 4, 5], 3)من المتوقع أن يكون[[0, 1, 2], [3, 4, 5]]([0, 1, 2, 3, 4, 5], 2)من المتوقع أن يكون[[0, 1], [2, 3], [4, 5]]([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]]
روابط ذات صلة
تلميح: 1
تشير الروابط أعلاه إلى استخدام Array.push() ، لذلك دعنا نبدأ أولاً بإنشاء صفيف جديد لتخزين المصفوفات الأصغر سنكون قريبًا مثل هذا:
var newArray = [];
حاول أن تحل المشكلة الآن
تلميح: 2
المقبل سنقوم في حاجة الى for loop إلى حلقة من خلال arr .
حاول أن تحل المشكلة الآن
تلميح: 3
وأخيرًا ، نحتاج إلى طريقة للقيام Array.slice() الفعلي ويمكننا استخدام Array.slice() للقيام بذلك. المفتاح إلى هذه الخوارزمية هو فهم كيفية عمل for loop size و Array.slice() و Array.push() معاً.
حاول أن تحل المشكلة الآن
تنبيه المفسد!
الحل في المستقبل!
الحل الأساسي للكود:
` 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;
}
`
شرح الشفرة:
- أولاً ، نخلق صفيفين فارغين يُسمى
tempresult، وسنعود في النهاية. - حلقات لدينا حلقة حتى
aيساوي أو أكثر من طول المصفوفة في الاختبار. - داخل الحلقة ،
temp.push(arr[a]);علىtemptemp.push(arr[a]);إذا كان الجزء المتبقي منa / sizeلا يساويsize - 1. - خلاف ذلك ، نحن ندفع إلى
temp، ودفعtempإلى متغيرresultوإعادة تعيينtempإلى صفيف فارغ. - بعد ذلك ، إذا لم يكن
tempصفيفًا فارغًا ، فإننا نضغط علىresult. - وأخيرًا ، نعيد قيمة
result.
روابط ذات صلة
حل الشفرة المتوسطة:
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; }
شرح الشفرة:
- أولاً ، نخلق مصفوفة
arr2فارغة حيث سنقوم بتخزين "قطع" لدينا. - تبدأ الحلقة في الصفر ، الزيادات حسب
sizeكل مرة من خلال الحلقة ، وتتوقف عندما تصل إلىarr.length. - لاحظ أن هذا الحل لا حلقة عبر
arr. بدلاً من ذلك ، نحن نستخدم الحلقة لإنشاء أرقام يمكننا استخدامها كمؤشرات لتقسيم المصفوفة في المواقع الصحيحة. - داخل الحلقة ، نقوم بإنشاء كل
arr.slice(i, i+size)باستخدامarr.slice(i, i+size)، وإضافة هذه القيمة إلىarr2معarr2.push(). - وأخيرًا ، نعيد قيمة
arr2.
روابط ذات صلة
الحل المتقدم للكود:
` 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);
`
شرح الشفرة:
-
أولاً ، نخلق متغيرين.
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.
روابط ذات صلة
الحل المتقدم للكود 2:
function chunkArrayInGroups(arr, size) { var newArr = []; while (arr.length) { newArr.push(arr.splice(0,size)); } return newArr; }
شرح الشفرة:
- أولا ، نخلق متغير.
newArrهو مصفوفة فارغةnewArrعليها. - لدينا
whileحلقات حلقة حتى طول المصفوفة في اختبار لدينا ليست 0. - داخل الحلقة ،
newArrصفيفarr.splice(0, size)باستخدامarr.splice(0, size). - لكل تكرار من حلقة
while، يحذفsizeعدد العناصر من مقدمةarrو يدفعهاnewArrإلىnewArr. - وأخيرًا ، نعيد قيمة
newArr.
روابط ذات صلة
الحل المتقدم للكود 3:
function chunkArrayInGroups(arr, size) { if (arr.length <= size){ return [arr]; } else { return [arr.slice(0,size)].concat(chunkArrayInGroups(arr.slice(size),size)); } }
شرح الشفرة:
- يتم إرجاع الصفيف الأصغر من الحجم المتداخل.
- لأية صف أكبر من الحجم ، يتم تقسيمه إلى قسمين. الجزء الأول متداخل ومتصل مع الجزء الثاني الذي يجعل استدعاء متكرر.
روابط ذات صلة
ملاحظات للمساهمات:
لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.- أضف شرحًا لحلك.
- تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم .

- الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة . (
لا تزيل أي أسماء مستخدمين حالية )
نرى
![]()
Wiki Challenge Solution Templateكمرجع.


