אני תמיד אוהב כששפת תכנות לוקחת עוד צעד בכיוון הפונקציונאלי, וזה יהיה הסיפור היום עם שתי פונקציות חדשות ב JavaScript - הפונקציות toReversed ו toSorted, הגירסאות הפונקציונאליות של reverse ו sort. בעוד שהפונקציות המקוריות שינו את מבנה הנתונים, הגירסאות החדשות שלהן מחזירות לנו עותק של מבנה הנתונים ממוין או הפוך.
הפונקציה reverse של JavaScript מופעלת על מערך והופכת את האיברים בו:
> const x = [1, 2, 3, 4];
undefined
> x.reverse()
[ 4, 3, 2, 1 ]
הגירסה החדשה שלה toReversed
מחזירה עותק חדש של המערך עם האיברים הפוכים:
> const x = [1, 2, 3, 4]
undefined
> x.toReversed()
[ 4, 3, 2, 1 ]
> x
[ 1, 2, 3, 4 ]
נשים לב שכשהמערך מקונן האלמנטים הפנימיים לא מועתקים, לכן:
> const x = [{a: 10}, {a: 10}, {a: 20}, {a: 30}]
undefined
> x.toReversed()
[ { a: 30 }, { a: 20 }, { a: 10 }, { a: 10 } ]
> x.toReversed()[0].a = 40
40
> x
[ { a: 10 }, { a: 10 }, { a: 20 }, { a: 40 } ]
אם במקום היפוך אנחנו רוצים למיין נוכל לקרוא ל toSorted
, שהיא הגירסה הפונקציונאלית של sort
. כמו sort גם toSorted יכולה לקבל פונקציית מיון או למיין לפי סדר מילוני:
> const values = [1, 10, 21, 2];
undefined
> values.toSorted()
[ 1, 10, 2, 21 ]
> values.toSorted((a, b) => a - b)
[ 1, 2, 10, 21 ]
אפשר לחשוב על שתיהן בתור גירסה מהירה וברורה יותר של array.slice().reverse()
ו array.slice().sort
:
> x.slice().reverse()
[ 9, 1, 2, 10 ]
> x
[ 10, 2, 1, 9 ]
> x.slice().sort()
[ 1, 10, 2, 9 ]
> x
[ 10, 2, 1, 9 ]