-
@צדיק-תמים אין דרך נורמלית לעשות דבר כזה ב-JS. (יש דרך לא נורמלית, אבל אל תעשה את זה...
eval(`arrayList${TypeList}Items`).length = 0
).
בד"כ, או שמעבירים את האובייקט עצמו שעליו אתה רוצה לבצע את הפעולה. או ששמים את שני הדברים בתוך אובייקט נוסף שממפה { שם (=מפתח) לערך } ומעבירים את המפתח.דוגמאות:
// דרך 1 let arrayListServerItems = [9, 5, 4]; let arrayListUserItems = [1, 2, 3]; function clearArrayListItems(list) { list.length = 0; } clearArrayListItems(arrayListUserItems); console.log(arrayListUserItems); // דרך 2 const arrays = { arrayListServerItems: [9, 5, 4]; arrayListUserItems: [1, 2, 3]; } function clearArrayListItems(TypeList) { arrays[`arrayList${TypeList}Items`].length = 0; } clearArrayListItems("User"); console.log(arrayListUserItems);
נ.ב. מקובל יותר ל"נקות" מערך ככה:
arr = []
ואם כן תצטרך להשתמש בדרך השניה. -
אכן הדרך של המיפוי כאובייקט נראית לי הכי אלגנטית, אבל לשם הרחבת הידע-
@yossiz אמר בביצוע פעולה על מערך ששמו מגיע מהארגומנט (של הפונקציה):יש דרך לא נורמלית, אבל אל תעשה את זה...
eval(`arrayList${TypeList}Items`).length = 0
גם אם הTypeList מגיע מהקוד עצמו ולא מהמשתמש? (כלומר בקוד מוגדר שכפתור X קורא לפונקציה עם ארגומנט "X", וכפתור Z קורא לפונקציה עם ארגומנט "Z", ולא שהמשתמש מזין את שם הרשימה בדרך כלשהיא)
-
@yossiz כמו תמיד הנושא הטכנולוגי תפס אותך יותר מאשר הצורך...
@צדיק-תמים שים את המערכים באובייקט:
arrays = {}; arrays.ListServerItems = [9, 5, 4]; arrays.ListUserItems = [1, 2, 3]; function claerArrayListItems(TypeList) { arrays[`List${TypeList}Items`] = []; } claerArrayListItems("User"); console.log(arrayListUserItems);
-
@dovid אני דווקא בעד...
ואסביר: כשאני כותב פה שאלה (כמעט תמיד) זה לא רק בשביל לדעת איך אני עכשיו מעיף את הבעיה הזאת וממשיך כבר לשורה הבאה של הקוד. כמובן אני כותב כאן כי נתקעתי בזה, ואני רוצה להתקדם, אבל לקבל "קביים" חד-פעמיים זה קצת חבל...
ולכן תשובה טובה בשבילי זה תשובה שמכילה קודם כל את הפתרון הבסיסי (יותר בקצרה) - כי בכל זאת, לפעמים יש שטח שקשה ללכת וצריך קביים , אבל גם חלק יותר מעמיק ומפורט - להרחבת הידע בנושא הספציפי... כדי שפעם הבאה שאתקל בבבעיה כזו בוואריאציה מעט שונה, אבין להקביל בין המקרים...
לדעתי @yossiz עשה את זה באופן מעולה ומושלם למדיי. -
@צדיק-תמים בשביל להכריע בינינו אתה צריך להכיר את ההיסטוריה של הבעיטות מתחת לשולחן
אני חושב ש@yossiz יסכים איתי שהוא לא היה אמור בכלל לגלות לך את קיומו של eval בגלל הצורך שהתעורר לך (שבכלל לא נגע ל"הרצת טקסט כקוד"). זה יצא לו כי הוא ישר תפס את הדרך הטכנית שניסת שהדרך היחידה להצליח בכיוון זה הוא eval. אבל הצורך שלך לא נוגע לפתרון הזה בכהוא זה. -
@dovid לא דיברתי על האזכור של
eval
כן או לא, אלא על התמצות/קצרנות - @yossiz הביא 2 דרכים לפתור את הבעיה שהעיליתי, והזכיר בדרך אגב אתeval
בדרך השלילה (שעל זה אפשר לדון האם זה נכון או לא, נראה לי שכן כי אני הרי הכרתי אתeval
, רק עוד לא חשבתי על השימוש בו בהקשר זה...), ואני ניצלתי זאת כדי לוודא באמת את מידת השלילה של השימוש בזה (באופן כללי).
לעומת זאת התשובה הזו שלך אמנם השמיטה את הeval
, אך על הדרך גם את שאר הפירוט... וקצת חבל
ואני הבנתי שעל זה כיוונת (שאין עניין להרחיב בשתי הדרכים האחרות), ועל זה היתה תגובתי... -