Một màn hình hiển thị danh sách theo thứ tự duyệt Map. Khi sửa nhãn của phần tử đầu, người phỏng vấn hỏi nó có tự chuyển xuống cuối không. Để trả lời, cần phân biệt cập nhật bản ghi đã có với việc xóa khóa rồi đưa khóa trở lại.
Ví dụ và cách đọc
Đặc tả Map.set tìm khóa đã tồn tại và thay giá trị của entry đó. Với khóa mới, entry được thêm vào cuối. Fixture dùng hai khóa chuỗi khác nhau và chuyển Map thành mảng để kiểm tra trực tiếp thứ tự. Chạy bằng Node 24.18.1.
const assert = require('node:assert/strict');
const labels = new Map([['a', 'An'], ['b', 'Bình']]);
labels.set('a', 'Anh');
assert.deepEqual([...labels], [['a', 'Anh'], ['b', 'Bình']]);
const value = labels.get('a');
labels.delete('a');
labels.set('a', value);
assert.deepEqual([...labels.keys()], ['b', 'a']);
Kiểm tra kết quả
Sau lần set đầu, a đứng trước b nhưng giá trị mới là Anh. Sau khi xóa a rồi thêm lại, thứ tự là b rồi a. Nếu muốn sắp xếp theo lần chỉnh sửa gần nhất, hãy mô tả rõ đó là quy tắc sản phẩm, rồi chọn lưu timestamp hay chủ động đổi vị trí. Việc đổi thứ tự không nên là tác dụng phụ khó thấy của hàm sửa nhãn.
Áp dụng và giới hạn
Thêm một case cập nhật khóa giữa danh sách và một case thêm khóa mới. Kiểm tra cả giá trị lẫn thứ tự vì chỉ kiểm tra get sẽ bỏ sót thay đổi bố cục. Bài chỉ chạy fixture trên Map trong RAM. Với giao diện đọc từ database hoặc nhiều nguồn cập nhật, hãy xác định thứ tự ở nơi tạo danh sách thay vì dựa vào thời điểm request hoàn tất.
Tình huống áp dụng
Một cách trả lời phỏng vấn là dự đoán mảng khóa trước, sau đó mô tả hai thao tác mà đặc tả thực hiện. Nếu interviewer hỏi vì sao chỉ gọi set không đủ cho danh sách “vừa sửa”, hãy nêu rằng thứ tự thêm khóa và thứ tự sửa là hai dữ liệu khác nhau. Có thể dùng trường updatedAt nếu cần lưu cả thời điểm, hoặc chọn một cấu trúc dữ liệu có quy tắc thứ tự được mô tả riêng.
Trong code review, chú ý việc xóa rồi chèn có thể ảnh hưởng đến vòng lặp đang diễn ra. Fixture chuyển Map thành mảng sau mỗi thao tác, nên không mô phỏng mutation bên trong iterator. Nếu cần đổi thứ tự nhiều phần tử, tạo danh sách khóa cần sửa trước rồi áp dụng sau khi duyệt. Viết test dùng vài nhãn trùng nhau nhưng khóa khác nhau để chứng minh thứ tự đang dựa trên khóa. Đừng lấy chuỗi hiển thị làm khóa nếu hai bản ghi có thể cùng tên.


