12 KiB
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;
}
`
شرح الشفرة:
- أولاً ، نخلق صفيفين فارغين يُسمى
temp
result
، وسنعود في النهاية. - حلقات لدينا حلقة حتى
a
يساوي أو أكثر من طول المصفوفة في الاختبار. - داخل الحلقة ،
temp.push(arr[a]);
علىtemp
temp.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
كمرجع.