Mô-đun 6 · Bài học 4 trong tổng số 424/32 trong khóa học~12 min
Bài học theo mô-đun (4/4)
sắp xếp
Việc sắp xếp một mảng trong JavaScript có một cái bẫy lớn: sort() làm thay đổi mảng ban đầu
và theo mặc định sắp xếp dưới dạng chuỗi.
Cái bẫy
JS
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20] ← !? sorted as strings: "1" < "10" < "2"Để sắp xếp theo số, bạn phải chuyển bộ so sánh (a, b) => number:
a - b< 0 →ađến trướca - b> 0 →bđến trướca - b=== 0 → đơn hàng không thay đổi
JS
const nums = [10, 2, 1, 20];
nums.sort((a, b) => a - b);
// [1, 2, 10, 20] ← ascending order
nums.sort((a, b) => b - a);
// [20, 10, 2, 1] ← descendingSắp xếp đối tượng theo trường
JS
const utenti = [
{ nome: 'Anna', eta: 30 },
{ nome: 'Luca', eta: 12 },
{ nome: 'Sara', eta: 18 },
];
utenti.sort((a, b) => a.eta - b.eta);
// [{Luca,12}, {Sara,18}, {Anna,30}]Đối với chuỗi, bạn có thể so sánh chúng với localeCompare:
JS
const nomi = ['Bruno', 'aurora', 'Carlo'];
nomi.sort((a, b) => a.localeCompare(b));
// ['aurora', 'Bruno', 'Carlo']Không làm thay đổi bản gốc
Hai lựa chọn:
JS
// 1) copy + sort
const copia = [...nums].sort((a, b) => a - b);
// 2) toSorted (modern, ES2023)
const ordinati = nums.toSorted((a, b) => a - b);Hãy thử nó
tập thể dục#js.m6.l4.e1
Nỗ lực: 0Đang tải…
Xác định `sortAscending(nums)`: trả về một bản sao MỚI của mảng, được sắp xếp theo thứ tự tăng dần dưới dạng số. Bản gốc không được thay đổi.
Đang tải trình chỉnh sửa…
Hiển thị gợi ý
[...nums].sort((a, b) => a - b)
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
tập thể dục#js.m6.l4.e2
Nỗ lực: 0Đang tải…
Xác định `sortByAgeAscending(people)`: cho một mảng { name, age }, trả về một bản sao mới được sắp xếp theo độ tuổi tăng dần. Bản gốc không được thay đổi.
Đang tải trình chỉnh sửa…
Hiển thị gợi ý
[...people].sort((a, b) => a.age - b.age)
Giải pháp khả dụng sau 3 lần thử