עוד אפשרות יותר כללית היא לקחת את הקוד המסורבל בלולאה הפנימית ולהוציא אותו לפונקציה נפרדת עם שם בעל משמעות. הפרדה לפונקציות היא דרך טובה להפוך כל קוד לקל יותר לקריאה
הבעיה שאתה יוצר מערך פעמיים - אתה מעביר לפונקציה מערך, ואז מסתכל על כל הארגומנטים שהיא קיבלה בתור מערך נוסף. כך בתוך הפונקציה המשתנה arguments מכיל למעשה כבר מערך:
arguments = [[2,3,4]]
שזה מערך של איבר אחד שהאיבר הראשון שלו הוא מערך.
יש לך שתי דרכים לצאת מזה, האחת להשתמש באופרטור 3 נקודות בעת הקריאה לפונקציה כדי לשבור את המערך:
console.log(sumArg(...arr1))
אפשרות שניה בתוך הפונקציה להסתכל על הפרמטר הראשון (והיחיד) שהיא קיבלה בתור המערך שהוא כבר:
function sumArg(numbersArray){
let res=numbersArray.reduce(sum);
return res;
}
אני לא מפרסם פיתרונות ובכוונה. המטרה של התרגילים היא לתת מקום לנסות וכן ״לשבור את הראש״ עד שמצליחים.
אני כן שמח לעזור בשיטוט הזה ואם נתקעים אפשר לשים פה שאלות או התחלה של דברים שכתבת וננסה להתקדם איתם, ואפשר גם להסתכל אחורה כאן בדיונים כדי למצוא רעיונות לפיתרונות שתלמידים אחרים הגישו (למרות שאני ממליץ קודם לפתור לבד)
חסר לי פשוט מידע בסיסי על מתודות בjs. בjava צריך לציין את סוג וכמות הפרמטרים ואם רוצים להעביר כמות לא ידועה של ארגומנטים אז פשוט שמים 3 נקודות בהגדרה של המתודה.
איך זה עובד בjs? קודם ראיתי בקוד שכתבתי שאם מגדירים מתודה בלי פרמטרים אז אפשר בכל מקרה להעביר אליה ארגומנטים כשקוראים לה.
בטח - ואגב אתה יכול להחליף את שם המשתמש בפורום (לוחץ בצד שמאל למעלה על האייקון 1 ושם נכנס לפרטים שלך)
ההבדל בין let ו var הוא הבדל של תחום הגדרה. הפקודה let מגדירה משתנה כך שאותו משתנה יוכר בבלוק אשר בו הוא הוגדר, והפקודה var מגדירה משתנה שיוכר בפונקציה בה הוא הוגדר. אני חושב שדוגמת קוד קצרה תעזור להבין את המשחק כאן.
נתחיל עם var:
function test() {
if ( 2 < 5 ) {
var x = 10;
}
console.log(x);
}
test();
הקוד מדפיס 10 בלי בעיה כיוון ש 2 קטן מחמש וכיוון שהגדרת משתנה עם var משפיעה על כל הפונקציה.
מה קורה ב let? הנה אותה דוגמא כשאני מחליף את שיטת הגדרת המשתנה:
function test() {
if ( 2 < 5 ) {
let x = 10;
}
console.log(x);
}
test();
הפעם הקוד זורק שגיאה:
/Users/ynonperek/a.js:6
console.log(x);
^
ReferenceError: x is not defined
at test (/Users/ynonperek/a.js:6:15)
at Object.<anonymous> (/Users/ynonperek/a.js:9:1)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
הסיבה שהמשתנה x מוכר רק בתוך הבלוק בו הוא הוגדר ולא בכל הפונקציה.
מבחינת העדפות שימוש ברירת המחדל ברוב שפות התכנות שאינן JavaScript או Python היא let, לכן רוב המתכנתים ירגישו יותר בנוח עם משתנים שמוכרים רק בבלוק בו הם הוגדרו. מסיבה זו היום גם ב JavaScript מקובל להשתמש ב let.
אתה יכול לשמוע יותר על החידושים ב JavaScript כולל על ההבדל בין let ו var בקורס JavaScript ES6 כאן באתר, למרות שאני ממליץ לסיים קודם את קורס הבסיס Front End Web Development
//ex1
function sum (x,y){
return x+y;
}
let arguments = [1,2,3,4,5,6,7,8,9,10];
let me = ()=>{
return arguments.reduce(sum);
}
console.log(me);
//ex2
let parapara=[1,2,1,2,1,2,4,5,5,5,5];
let him = new Set(parapara);
console.log(him);