אז הנה להטוט חמוד שיצא לי להכיר היום בJS 
קורה שצריך לפעמים לכתוב לולאה שרצה מהסוף להתחלה (למשל כשרוצים לרוץ על מערך ולחסר ממנו איברים)
בC# היינו כותבים את הקוד ככה:
var demo = new List<int> { 1,2, 3, 4,5, 6, 7, 8, 9, 10, 11, 12, 13 };
for (var i = demo.Count; i > 0; i--)
{
Console.WriteLine(demo[i-1]);
if (demo[i - 1] % 3 == 0)
demo.Remove(demo[i]);
}
כלומר, הלולאה כוללת 3 חלקים, אינדקס, תנאי שכל זמן שהוא מתקיים הלולאה תתבצע, ופקודה שמתבצעת בסיום כל איטרציה --i.
כמו כן, כדי לגשת לאינדקס הנכון במערך אנו כותבים i-1 כיון שהאינדקסים מתחילים מ0, והcount מחזיר לנו את הכמות שהיא מבוססת על 1.
אולם, בJS אפשר לכתוב את אותו קוד בצורה כזו:
var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13]
for(var i = arr.length; i--;){
console.log(arr[i])
if(arr[i]%3 ===0)
arr.splice(i)
}
הטריק כאן הוא בשורה ה2 וה3
והוא בנוי על 2 הנחות בJS:
0 זה שווה גם לשקר - false (אא"כ כותבים ===),
ולכן בלולאה מספיק לכתוב רק 2 פרמטרים מתוך 3, וזה לא זורק שגיאה, כי בעצם אנו גם מגדירים תנאי (דהיינו כל זמן שi הוא לא שקר, דהיינו לא 0. וגם מפחיתים כל פעם את המונה ישירות, כי ברגע שהוא בודק את התנאי הוא כבר מפחית אותו, ולא רק כשהוא מסיים לבצע את הלולאה, וכאן אנו מגיעים לשורה ה3 שאנו יכולים להתייחס לאינדקס ישירות כפחות 1, ולא צריכים להפחית ממנו 1 כמו שעשינו בC#. (שהרי האורך של המערך גדול ב1 מהאינדקס, כיון שהאינדקס מתחיל מ0).
צריך לשים לב, שאם היינו כותבים
i-- ולא כמו שכתבנו, זה היה יכול לגרום ללולאה אין סופית, כיון שבמידה והערך הההתחלתי היה 0, הוא היה קודם מבצע את ההשמה, ואז היה לו 1- שזה אמת, והוא היה ממשיך לבצע את הלולאה עד אין סוף למספרים השליליים 
פורסם במקור בפורום CODE613 ב07/11/2017 01:32 (+02:00)