אם אתה מתקשה להבין את האתגר Nesting For Loops של freeCodeCamp, אל תדאג. קיבלנו את הגב שלך.
בבעיה זו עליך להשלים את multiplyAll()
הפונקציה ולוקח מערך רב מימדי כארגומנט. זכרו שמערך רב מימדי, המכונה לפעמים מערך דו מימדי, הוא רק מערך מערכים, למשל [[1,2], [3,4], [5,6]]
,.
בעורך מימין multiplyAll()
מוגדר כדלקמן:
function multiplyAll(arr) { var product = 1; // Only change code below this line // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
עליך להשלים את הפונקציה כך שהיא מכפילה את product
המשתנה בכל מספר במערכי המשנה של הפרמטר arr
, שהוא מערך רב מימדי.
ישנן הרבה דרכים שונות לפתור בעיה זו, אך נתמקד בשיטה הפשוטה ביותר באמצעות for
לולאות.
הגדר את for
הלולאות שלך
מכיוון arr
שהוא מערך רב מימדי, תזדקק לשני for
לולאות: אחת לולאה דרך כל אחד ממערכי המשנה, ואחרת לולאה דרך האלמנטים בכל מערך משנה.
דלג על המערכים הפנימיים
לשם כך, הגדר for
לולאה כמו שעשית באתגרים קודמים:
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
שים לב שאנחנו משתמשים let
במקום var
לולאה ולהצהיר product
. באתגר הזה לא תוכל להבחין בהבדל בין השניים, אבל בדרך כלל זה אימון טוב להשתמש ES6 של const
ו let
בכל פעם שאתה יכול. תוכלו לקרוא עוד מדוע במאמר זה.
כעת רשום כל אחד ממערכי המשנה למסוף:
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { console.log(arr[i]); } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
בגלל זה אתה מתקשר multiplyAll()
עם [[1,2],[3,4],[5,6,7]]
בתחתית, אתה צריך לראות את הדברים הבאים:
[ 1, 2 ] [ 3, 4 ] [ 5, 6, 7 ]
דלג בין האלמנטים בכל מערך משנה
עכשיו אתה צריך לעבור על כל מספר במערכי המשנה שרק התחברת למסוף.
הסר console.log(arr[i]);
וצור for
לולאה נוספת בתוך זו שכתבת זה עתה:
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr[i].length; j++) { } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
זכור כי, עבור הלולאה הפנימית, אנחנו צריכים לבדוק את .length
של arr[i]
שכן arr[i]
הוא אחד מהערכים תת הסתכלנו קודם לכן.
כעת היכנס arr[i][j]
למסוף כדי לראות כל אחד מהאלמנטים הבודדים:
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr[i].length; j++) { console.log(arr[i][j]); } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
1 2 3 4 5 6 7
לסיום, הכפל product
בכל אלמנט בכל אחד מערכי המשנה:
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr[i].length; j++) { product *= arr[i][j]; } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
אם תיכנס product
למסוף, תראה את התשובה הנכונה לכל מקרה מבחן:
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr[i].length; j++) { product *= arr[i][j]; } } // Only change code above this line console.log(product); return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
6 // [[1], [2], [3]] 5040 // [[1, 2], [3, 4], [5, 6, 7]] 54 // [[5, 1], [0.2, 4, 0.5], [3, 9]]
מבט מקרוב
אם אתה עדיין לא בטוח מדוע הקוד שלמעלה עובד, אל תדאג - אתה לא לבד. העבודה עם לולאות מקוננות היא מסובכת, ואפילו מפתחים מנוסים יכולים להתבלבל.
במקרים כאלה זה יכול להיות מועיל לרשום משהו מפורט יותר למסוף. חזור לקוד שלך והיכנס `Sub-array ${i}: ${arr[i]}`
לקונסולה ממש לפני for
הלולאה הפנימית :
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { console.log(`Sub-array ${i}: ${arr[i]}`); for (let j = 0; j < arr[i].length; j++) { product *= arr[i][j]; } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
for
בלולאה החיצונית , כל איטרציה עוברת דרך מערכי המשנה פנימה arr
. אתה אמור לראות זאת במסוף:
Sub-array 0: 1,2 Sub-array 1: 3,4 Sub-array 2: 5,6,7
שים לב שאנו משתמשים באותיות מילוליות לעיל. `Sub-array ${i}: ${arr[i]}`
זהה ל 'Sub-array ' + i + ': ' + arr[i]
, פשוט הרבה יותר קל לכתוב.
עכשיו for
בלולאה הפנימית , היכנס `Element ${j}: ${arr[i][j]}`
למסוף:
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { console.log(`Sub-array ${i}: ${arr[i]}`); for (let j = 0; j < arr[i].length; j++) { console.log(`Element ${j}: ${arr[i][j]}`); product *= arr[i][j]; } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
for
הלולאה הפנימית עוברת דרך כל אלמנט בכל תת-מערך ( arr[i]
), לכן אתה אמור לראות זאת במסוף:
Sub-array 0: 1,2 Element 0: 1 Element 1: 2 Sub-array 1: 3,4 Element 0: 3 Element 1: 4 Sub-array 2: 5,6,7 Element 0: 5 Element 1: 6 Element 2: 7
האיטרציה הראשונה של i
תופס את מערך המשנה הראשון [1, 2]
,. ואז האיטרציה הראשונה של j
עוברת דרך כל אלמנט במערך המשנה ההוא:
// i is 0 arr[0] // [1, 2]; // j is 0 arr[0][0] // 1 // j is 1 arr[0][1] // 2 ----- // i is 1 arr[1] // [3, 4] // j is 0 arr[1][0] // 3 // j is 1 arr[1][1] // 4 ...
דוגמה זו היא די פשוטה, אך arr[i][j]
עדיין יכולה להיות קשה להבנה מבלי להתחבר למספר דברים למסוף.
שיפור מהיר אחד שאנחנו יכולים לעשות הוא להכריז על subArray
משתנה for
בלולאה החיצונית ולהגדיר אותו שווה ל arr[i]
:
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { const subArray = arr[i]; for (let j = 0; j < arr[i].length; j++) { product *= arr[i][j]; } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
אז פשוט עשה כמה שינויים בקוד כדי להשתמש subArray
במשתנה החדש במקום arr[i]
:
function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { const subArray = arr[i]; for (let j = 0; j < subArray.length; j++) { product *= subArray[j]; } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
זה צריך להיות כל מה שאתה צריך לדעת על מערכים רב מימדיים for
ולולאות מקוננות . עכשיו צא לשם ואתר עם המיטב שבהם!