8.5 KiB
title, localeTitle
title | localeTitle |
---|---|
Steamroller | أجاز |
تذكر استخدام
Read-Search-Ask
إذا واجهتك مشكلة. حاول إقران البرنامج واكتب الكود الخاص بك
شرح المشكلة:
تبدو هذه المشكلة بسيطة ولكن عليك التأكد من تسطيح أي صفيف ، بغض النظر عن المستوى الذي يضيف صعوبة في المشكلة.
روابط ذات صلة
تلميح: 1
تحتاج إلى التحقق مما إذا كان العنصر عبارة عن مصفوفة أم لا.
حاول أن تحل المشكلة الآن
تلميح: 2
إذا كنت تتعامل مع مصفوفة ، فإنك تحتاج إلى تسطيحها عن طريق الحصول على القيمة داخل الصفيف. وهذا يعني أنه إذا كان لديك [4]] ، فبدلاً من العودة [4] ، يجب عليك العودة. 4. إذا حصلت على [[[4]]] ، فستحتاج إلى نفس الشيء ، فأنت تريد الرقم 4. يمكنك الوصول إليه باستخدام arr [index1] [index2] للذهاب إلى مستوى أعمق.
حاول أن تحل المشكلة الآن
! [: speech_balloon: تلميح: 3
سوف تحتاج بالتأكيد إلى العودية أو طريقة أخرى لتجاوز صفيفتين من المستوى لجعل الشفرة مرنة وغير مشفرة للأجوبة المطلوبة. إستمتع!
حاول أن تحل المشكلة الآن
تنبيه المفسد!
الحل في المستقبل!
الحل الأساسي للكود:
`function steamrollArray(arr) { var flattenedArray = [];
// Create function that adds an element if it is not an array. // If it is an array, then loops through it and uses recursion on that array. var flatten = function(arg) { if (!Array.isArray(arg)) { flattenedArray.push(arg); } else { for (var a in arg) { flatten(arg[a]); } } };
// Call the function for each element in the array arr.forEach(flatten); return flattenedArray; }
// test here steamrollArray([1, [2], [3, 4]]); `
شرح الشفرة:
- إنشاء متغير جديد للحفاظ على صفائف بالارض.
- قم بإنشاء دالة تضيف عناصر غير صفيف إلى المتغير الجديد ، وبالنسبة إلى تلك المصفوفة ، فإنها تتكرر من خلالها للحصول على العنصر.
- يفعل ذلك باستخدام العودية ، إذا كان العنصر عبارة عن صفيف ثم استدعاء الدالة مرة أخرى مع طبقة من الصفيف أعمق للتحقق مما إذا كان صفيف أم لا. إذا لم يكن ثم دفع هذا العنصر غير الصفيف للمتغير الذي يتم إرجاعه. خلاف ذلك ، استمر في التعمق.
- استدعاء الدالة ، في المرة الأولى التي سيتم تمريرها دائماً صفيف ، لذلك تقع دائماً في فرع isArray
- أعد الصفيف مسطح.
روابط ذات صلة
حل الشفرة المتوسطة:
`function steamrollArray(arr) { let flat = [].concat(...arr); return flat.some(Array.isArray) ? steamrollArray(flat) : flat; }
flattenArray([1, [2], [3, 4]]); `
شرح الشفرة:
- استخدم عامل النشر لسَلسَلة كل عنصر من عناصر
arr
مع صفيف فارغ - استخدم أسلوب
Array.some()
لمعرفة ما إذا كان الصفيف الجديد يحتوي على صفيف لا يزال - إذا كان كذلك ، استخدم استدعاء العودية ، قم
steamrollArray
مرة أخرى ، مروراً في المصفوفة الجديدة لتكرار العملية على المصفوفات المتداخلة بعمق - إذا لم يتم ذلك ، أعد الصفيف مسطح
روابط ذات صلة
الحل المتقدم للكود:
function steamrollArray(arr) { return arr.toString() .replace(',,', ',') // "1,2,,3" => "1,2,3" .split(',') // ['1','2','3'] .map(function(v) { if (v == '[object Object]') { // bring back empty objects return {}; } else if (isNaN(v)) { // if not a number (string) return v; } else { return parseInt(v); // if a number in a string, convert it } }); }
شرح الشفرة:
- أولاً ، نحول المصفوفة إلى سلسلة ، والتي ستمنحنا سلسلة من الأرقام مفصولة بفاصلة ، فاصلة مزدوجة إذا كان هناك مصفوفة فارغة ونص كائن حرفي إذا كان هناك كائن ، يمكننا إصلاحه لاحقًا في بيان if الخاص بنا .
- نستبدل الفاصلة المزدوجة بواحد ، ثم نقسمها إلى صفيف.
- الخريطة من خلال الصفيف وإصلاح قيم الكائن وتحويل أرقام السلسلة إلى أرقام منتظمة.
ملاحظات للمساهمات:
لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
- أضف شرحًا لحلك.
- تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم .
نرى
![]()
Wiki Challenge Solution Template
كمرجع.