Giả sử chúng ta có mảng sau chứa các cặp [tên môn học, điểm số]:
var subjectNameAlongWithMarks = [
["JavaScript", 78],
["Java", 56],
["JavaScript", 58],
["MySQL", 77],
["MongoDB", 75],
["Java", 98]
];
Mảng có các giá trị trùng lặp tại chỉ mục 0 (tên môn học). Để loại bỏ các phần tử trùng dựa trên chỉ mục này, ta sử dụng Set kết hợp với filter:
Ví dụ
var subjectNameAlongWithMarks = [
["JavaScript", 78],
["Java", 56],
["JavaScript", 58],
["MySQL", 77],
["MongoDB", 75],
["Java", 98]
];
var distinctResult = subjectNameAlongWithMarks.filter(function ([value]) {
return !this.has(value) && !!this.add(value);
}, new Set());
console.log(distinctResult);
Cách chạy
Lưu code vào file (ví dụ demo196.js) và chạy lệnh:
node demo196.js
Kết quả
[
[ 'JavaScript', 78 ],
[ 'Java', 56 ],
[ 'MySQL', 77 ],
[ 'MongoDB', 75 ]
]
Giải thích: Hàm filter duyệt qua từng phần tử, destructuring lấy value (phần tử ở chỉ mục 0). Set lưu trữ các giá trị đã gặp. Nếu value chưa có trong Set (!this.has(value)), thêm vào Set (this.add(value)) và giữ lại phần tử đó. Kết quả chỉ giữ lại lần xuất hiện đầu tiên của mỗi môn học.